From 866e1e88cb53a188f1519ed1aacb1e1fed8a99ec Mon Sep 17 00:00:00 2001 From: abdurrezzak Date: Thu, 26 Oct 2017 11:57:11 +0300 Subject: [PATCH] Add files via upload --- 8.HeapSort.cpp | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 8.HeapSort.cpp diff --git a/8.HeapSort.cpp b/8.HeapSort.cpp new file mode 100644 index 0000000..f0627d3 --- /dev/null +++ b/8.HeapSort.cpp @@ -0,0 +1,63 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; +typedef unsigned long long ull; + +void heapify(int arr[], int n, int i) // O(lgn) +{ + int largest = i; // Initialize largest as root + int l = 2*i + 1; // left = 2*i + 1 + int r = 2*i + 2; // right = 2*i + 2 + + // If left child is larger than root + if (l < n && arr[l] > arr[largest]) + largest = l; + + // If right child is larger than largest so far + if (r < n && arr[r] > arr[largest]) + largest = r; + + // If largest is not root + if (largest != i) + { + swap(arr[i], arr[largest]); + + // Recursively heapify the affected sub-tree + heapify(arr, n, largest); + } +} + +void heap_sort(int arr[], int n) // O(nlgn) tighter bound +{ + // Build heap (rearrange array) + for (int i = n / 2 - 1; i >= 0; i--) + heapify(arr, n, i); + + // One by one extract an element from heap + for (int i=n-1; i>=0; i--) + { + // Move current root to end + swap(arr[0], arr[i]); + + // call max heapify on the reduced heap + heapify(arr, i, 0); + } +} + +int main() +{ + + int a[] = {10, 7, 8, 9, 1, 5, 96, 12, 6, 13}; + + heap_sort(a,10); //sorting + for(int i=0;i<10; i++) + cout << a[i] << " "; +} +