heap algorithm code example

Example 1: heap in java

In Java PriorityQueue can be used as a Heap.

Min Heap
PriorityQueue<Integer> minHeap = new PriorityQueue<>();


Max Heap:
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Comparator.reverseOrder());

Example 2: heap sort

// @see https://www.youtube.com/watch?v=H5kAcmGOn4Q

function heapify(list, size, index) {
    let largest = index;
    let left = index * 2 + 1;
    let right = left + 1;
    if (left < size && list[left] > list[largest]) {
        largest = left;
    }
    if (right < size && list[right] > list[largest]) {
        largest = right;
    }
    if (largest !== index) {
        [list[index], list[largest]] = [list[largest], list[index]];
        heapify(list, size, largest);
    }
    return list;
}

function heapsort(list) {
    const size = list.length;
    let index = ~~(size / 2 - 1);
    let last = size - 1;
    while (index >= 0) {
        heapify(list, size, --index);
    }
    while (last >= 0) {
        [list[0], list[last]] = [list[last], list[0]];
        heapify(list, --last, 0);
    }
    return list;
}

heapsort([4, 7, 2, 6, 4, 1, 8, 3]);

Example 3: heapsort

Implementation of heap sort in C++:

#include <bits/stdc++.h>
using namespace std;

// To heapify a subtree rooted with node i which is
// Heapify:- A process which helps regaining heap properties in tree after removal 
void heapify(int A[], int n, int i)
{
   int largest = i; // Initialize largest as root
   int left_child = 2 * i + 1; // left = 2*i + 1
   int right_child = 2 * i + 2; // right = 2*i + 2

   // If left child is larger than root
   if (left_child < n && A[left_child] > A[largest])
       largest = left_child;

   // If right child is larger than largest so far
   if (right_child < n && A[right_child] > A[largest])
       largest = right_child;

   // If largest is not root
   if (largest != i) {
       swap(A[i], A[largest]);

       // Recursively heapify the affected sub-tree
       heapify(A, n, largest);
   }
}

// main function to do heap sort
void heap_sort(int A[], int n)
{
   // Build heap (rearrange array)
   for (int i = n / 2 - 1; i >= 0; i--)
       heapify(A, n, i);

   // One by one extract an element from heap
   for (int i = n - 1; i >= 0; i--) {
       // Move current root to end
       swap(A[0], A[i]);

       // call max heapify on the reduced heap
       heapify(A, i, 0);
   }
}

/* A  function to print sorted Array */
void printArray(int A[], int n)
{
   for (int i = 0; i < n; ++i)
       cout << A[i] << " ";
   cout << "\n";
}

// Driver program
int main()
{
   int A[] = { 22, 19, 3, 25, 26, 7 }; // array to be sorted
   int n = sizeof(A) / sizeof(A[0]); // n is size of array

   heap_sort(A, n);

   cout << "Sorted array is \n";
   printArray(A, n);
}

Example 4: heapsort

#include <iostream>

using namespace std;
void swap(int*,int*);
void heapify(int arr[],int n,int index)
{
    int left=2*index+1;
    int right=left+1;
    int max=index;
    if(left<n&&arr[left]>arr[max])
    {
        max=left;
    }
    if(right<n&&arr[right]>arr[max])
    {
        max=right;
    }
    if(index!=max)
    {
        swap(&arr[index],&arr[max]);
        heapify(arr,n,max);
    }
}
void buildheap(int arr[],int n)
{
    for(int i=(n/2);i>=0;i--)
    {
        heapify(arr,n,i);
    }
}

void heapsort(int arr[],int n)
{
    buildheap(arr,n);
    int l=n-1;
    while(l>0)
    {
        swap(&arr[0],&arr[l]);
        l--;
        n--;
        heapify(arr,n,0);
    }
}
void disp(int arr[],int n)
{
    for(int i=0;i<n;i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}

int main()
{
    int n;
    cout<<"enter the size of the array:"<<endl;
    cin>>n;
    int a[n];

    cout<<"enter the elements of the array:"<<endl;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    cout<<"array before sorting:"<<endl;
    for(int i=0;i<n;i++)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;
    //buildheap(a,n);
    //disp(a,n);
    cout<<"array after sorting:"<<endl;
    heapsort(a,n);
    disp(a,n);
    return 0;
}
void swap(int*a,int*b)
{
    int temp=*a;
    *a=*b;
    *b=temp;
}