Max Heapify in C++
Max heapify using std::vector
#include <iostream> #include <vector> using namespace std; void swap(vector<int>& heap, int i, int j) { int t= heap[i]; heap[i]= heap[j]; heap[j]= t; } void maxHeapify(vector<int>& heap, int i) { int left= (i+1)*2-1; int right= (i+1)*2; int largest= i; int heapSize= heap.size(); if (left < heapSize && heap[left] > heap[largest]) largest= left; if (right < heapSize && heap[right] > heap[largest]) largest= right; if (i != largest) { swap(heap, largest, i); maxHeapify(heap, largest); } } void maxHeapify(vector<int>& heap) { int heapSize= heap.size(); if (heapSize <= 0) return; for (int i= heapSize-1; i >= 0; --i) maxHeapify(heap, i); } int main() { vector<int> heap; for (int i= 0; i < 10; ++i) heap.push_back(i); maxHeapify(heap); for (int i= 0; i < heap.size(); ++i) cout << heap[i] << endl; }
Max heapify using std::array
#include <iostream> #include <array> using namespace std; template<size_t SZ> void swap(array<int,SZ>& heap, int i, int j) { int t= heap[i]; heap[i]= heap[j]; heap[j]= t; } template<size_t SZ> void maxHeapify(array<int,SZ>& heap, int i) { int left= (i+1)*2-1; int right= (i+1)*2; int largest= i; int heapSize= heap.size(); if (left < heapSize && heap[left] > heap[largest]) largest= left; if (right < heapSize && heap[right] > heap[largest]) largest= right; if (i != largest) { swap(heap, largest, i); maxHeapify(heap, largest); } } template<size_t SZ> void maxHeapify(array<int,SZ>& heap) { int heapSize= heap.size(); cout << "heapSize: " << heapSize << endl; if (heapSize <= 0) return; for (int i= heapSize-1; i >= 0; --i) maxHeapify(heap, i); } int main() { array<int,10> heap; for (int i= 0; i < 10; ++i) heap[i]= i; maxHeapify(heap); for (int i= 0; i < heap.size(); ++i) cout << heap[i] << endl; }