diff --git a/Iterative_Heap_sort b/Iterative_Heap_sort new file mode 100644 index 0000000..843dbf8 --- /dev/null +++ b/Iterative_Heap_sort @@ -0,0 +1,64 @@ +#include +using namespace std; +void buildMaxHeap(int arr[], int n) +{ + for (int i = 1; i < n; i++) + { + // if child is bigger than parent + if (arr[i] > arr[(i - 1) / 2]) + { + int j = i; + while (arr[j] > arr[(j - 1) / 2]) + { + swap(arr[j], arr[(j - 1) / 2]); + j = (j - 1) / 2; + } + } + } +} + +void heapSort(int arr[], int n) +{ + buildMaxHeap(arr, n); + + for (int i = n - 1; i > 0; i--) + { + swap(arr[0], arr[i]); + int j = 0, index; + + do + { + index = (2 * j + 1); + + if (arr[index] < arr[index + 1] && + index < (i - 1)) + index++; + + if (arr[j] < arr[index] && index < i) + swap(arr[j], arr[index]); + + j = index; + + } while (index < i); + } +} + +int main() +{ + int arr[] = {113, 323, 45, 25, 11, 21}; + int n = sizeof(arr) / sizeof(arr[0]); + + printf("Given array: "); + for (int i = 0; i < n; i++) + printf("%d ", arr[i]); + + printf("\n\n"); + + heapSort(arr, n); + + printf("Sorted array: "); + for (int i = 0; i < n; i++) + printf("%d ", arr[i]); + + return 0; +}