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: heaps in java
public class BinaryHeap {
private static final int d= 2;
private int[] heap;
private int heapSize;
public BinaryHeap(int capacity){
heapSize = 0;
heap = new int[ capacity+1];
Arrays.fill(heap, -1);
}
public boolean isEmpty(){
return heapSize==0;
}
public boolean isFull(){
return heapSize == heap.length;
}
private int parent(int i){
return (i-1)/d;
}
private int kthChild(int i,int k){
return d*i +k;
}
public void insert(int x){
if(isFull())
throw new NoSuchElementException("Heap is full, No space to insert new element");
heap[heapSize++] = x;
heapifyUp(heapSize-1);
}
public int delete(int x){
if(isEmpty())
throw new NoSuchElementException("Heap is empty, No element to delete");
int key = heap[x];
heap[x] = heap[heapSize -1];
heapSize--;
heapifyDown(x);
return key;
}
private void heapifyUp(int i) {
int temp = heap[i];
while(i>0 && temp > heap[parent(i)]){
heap[i] = heap[parent(i)];
i = parent(i);
}
heap[i] = temp;
}
private void heapifyDown(int i){
int child;
int temp = heap[i];
while(kthChild(i, 1) < heapSize){
child = maxChild(i);
if(temp < heap[child]){ heap[i] = heap[child]; }else break; i = child; } heap[i] = temp; } private int maxChild(int i) { int leftChild = kthChild(i, 1); int rightChild = kthChild(i, 2); return heap[leftChild]>heap[rightChild]?leftChild:rightChild;
}
public void printHeap()
{
System.out.print("nHeap = ");
for (int i = 0; i < heapSize; i++)
System.out.print(heap[i] +" ");
System.out.println();
}
public int findMax(){
if(isEmpty())
throw new NoSuchElementException("Heap is empty.");
return heap[0];
}
public static void main(String[] args){
BinaryHeap maxHeap = new BinaryHeap(10);
maxHeap.insert(10);
maxHeap.insert(4);
maxHeap.insert(9);
maxHeap.insert(1);
maxHeap.insert(7);
maxHeap.insert(5);
maxHeap.insert(3);
maxHeap.printHeap();
maxHeap.delete(5);
maxHeap.printHeap();
}
}
Example 3: heapsort
Implementation of heap sort in C++:
#include <bits/stdc++.h>
using namespace std;
void heapify(int A[], int n, int i)
{
int largest = i;
int left_child = 2 * i + 1;
int right_child = 2 * i + 2;
if (left_child < n && A[left_child] > A[largest])
largest = left_child;
if (right_child < n && A[right_child] > A[largest])
largest = right_child;
if (largest != i) {
swap(A[i], A[largest]);
heapify(A, n, largest);
}
}
void heap_sort(int A[], int n)
{
for (int i = n / 2 - 1; i >= 0; i--)
heapify(A, n, i);
for (int i = n - 1; i >= 0; i--) {
swap(A[0], A[i]);
heapify(A, i, 0);
}
}
void printArray(int A[], int n)
{
for (int i = 0; i < n; ++i)
cout << A[i] << " ";
cout << "\n";
}
int main()
{
int A[] = { 22, 19, 3, 25, 26, 7 };
int n = sizeof(A) / sizeof(A[0]);
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;
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;
}