在C ++中将最小堆转换为最大堆

在本教程中,我们将讨论将最小堆转换为最大堆的程序。

为此,我们将提供最小堆的数组表示形式。我们的任务是将给定的最小堆转换为O(n)时间复杂度的最大堆。

示例

#include<bits/stdc++.h>

using namespace std;

//将给定的子树转换为堆

void convert_arrayheap(int arr[], int i, int n){

   int l = 2*i + 1;

   int r = 2*i + 2;

   int largest = i;

   if (l < n && arr[l] > arr[i])

      largest = l;

   if (r < n && arr[r] > arr[largest])

      largest = r;

   if (largest != i){

      swap(arr[i], arr[largest]);

      convert_arrayheap(arr, largest, n);

   }

}

//最终建立最大堆

void convert_maxheap(int arr[], int n){

   //堆放所有节点元素

   for (int i = (n-2)/2; i >= 0; --i)

   convert_arrayheap(arr, i, n);

}

//打印数组

void printArray(int* arr, int size){

   for (int i = 0; i < size; ++i)

   printf("%d ", arr[i]);

}

int main(){

   int arr[] = {3, 5, 9, 6, 8, 20, 10, 12, 18, 9};

   int n = sizeof(arr)/sizeof(arr[0]);

   printf("Min Heap array : ");

   printArray(arr, n);

   convert_maxheap(arr, n);

   printf("\nMax Heap array : ");

   printArray(arr, n);

   return 0;

}

输出结果

Min Heap array : 3 5 9 6 8 20 10 12 18 9

Max Heap array : 20 18 10 12 9 9 3 5 6 8

以上是 在C ++中将最小堆转换为最大堆 的全部内容, 来源链接: utcz.com/z/316611.html

回到顶部