Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ เพื่อใช้งาน Max Heap


Binary Heap เป็นต้นไม้ไบนารีที่สมบูรณ์ซึ่งก็คือ Min Heap หรือ Max Heap ใน Max Binary Heap คีย์ที่รูทจะต้องสูงสุดในบรรดาคีย์ทั้งหมดที่มีอยู่ใน Binary Heap คุณสมบัตินี้ต้องเป็นจริงแบบเรียกซ้ำสำหรับโหนดทั้งหมดใน Binary Tree Min Binary Heap คล้ายกับ MinHeap

อัลกอริทึม

สำหรับ max_heap:

Begin
   Declare function max_heap ()
      Declare j, t of the integer datatype.
      Initialize t = a[m].
      j = 2 * m;
      while (j <= n) do
         if (j < n && a[j+1] > a[j]) then
            j = j + 1
         if (t > a[j]) then
            break
         else if (t <= a[j]) then
            a[j / 2] = a[j]
            j = 2 * j
      a[j/2] = t
      return
End.

สำหรับ build_maxheap:

Begin
   Declare function build_maxheap(int *a,int n).
      Declare k of the integer datatype.
      for(k = n/2; k >= 1; k--)
         Call function max_heap(a,k,n)
End.

ตัวอย่าง

#include <iostream>
using namespace std;
void max_heap(int *a, int m, int n) {
   int j, t;
   t = a[m];
   j = 2 * m;
   while (j <= n) {
      if (j < n && a[j+1] > a[j])
         j = j + 1;
      if (t > a[j])
         break;
      else if (t <= a[j]) {
         a[j / 2] = a[j];
         j = 2 * j;
      }
   }
   a[j/2] = t;
   return;
}
void build_maxheap(int *a,int n) {
   int k;
   for(k = n/2; k >= 1; k--) {
      max_heap(a,k,n);
   }
}
int main() {
   int n, i;
   cout<<"enter no of elements of array\n";
   cin>>n;
   int a[30];
   for (i = 1; i <= n; i++) {
      cout<<"enter elements"<<" "<<(i)<<endl;
      cin>>a[i];
   }
   build_maxheap(a,n);
   cout<<"Max Heap\n";
   for (i = 1; i <= n; i++) {
      cout<<a[i]<<endl;
   }
}

ผลลัพธ์

enter no of elements of array
5
enter elements 1
7
enter elements 2
6
enter elements 3
2
enter elements 4
1
enter elements 5
4
Max Heap
7
6
2
1
4