mirror of
https://hub.njuu.cf/TheAlgorithms/C-Plus-Plus.git
synced 2023-10-11 13:05:55 +08:00
Add files via upload
This commit is contained in:
parent
a21810eb49
commit
a1b7bc4fb2
79
heap_sort__1.cpp
Normal file
79
heap_sort__1.cpp
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
// C++ program for implementation of Heap Sort
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
// To heapify a subtree rooted with node i
|
||||||
|
// which is an index in arr[].
|
||||||
|
// n is size of heap
|
||||||
|
void heapify(int arr[], int N, int i)
|
||||||
|
{
|
||||||
|
|
||||||
|
// Initialize largest as root
|
||||||
|
int largest = i;
|
||||||
|
|
||||||
|
// left = 2*i + 1
|
||||||
|
int l = 2 * i + 1;
|
||||||
|
|
||||||
|
// right = 2*i + 2
|
||||||
|
int r = 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Main function to do heap sort
|
||||||
|
void heapSort(int arr[], int N)
|
||||||
|
{
|
||||||
|
|
||||||
|
// 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// A utility function to print array of size n
|
||||||
|
void printArray(int arr[], int N)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < N; ++i)
|
||||||
|
cout << arr[i] << " ";
|
||||||
|
cout << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Driver's code
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int arr[] = { 12, 11, 13, 5, 6, 7 };
|
||||||
|
int N = sizeof(arr) / sizeof(arr[0]);
|
||||||
|
|
||||||
|
// Function call
|
||||||
|
heapSort(arr, N);
|
||||||
|
|
||||||
|
cout << "Sorted array is \n";
|
||||||
|
printArray(arr, N);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user