#include <iostream>
#include <algorithm>
using namespace std;
void HeapAdjust(int *arr, int size, int element);
void BuildHeap(int *arr, int size);
void HeapSort(int *arr, int size);
int main()
{
int a[] = { 0,16,20,3,11,17,8 };
HeapSort(a, sizeof(a) / sizeof(a[0]));
for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
{
cout << a[i] << " ";
}
return 0;
}
void HeapAdjust(int *arr, int size, int element)
{
int leftchild = element * 2 + 1, rightchild = leftchild + 1;
int min_index = element;
if (element <= (size - 1) / 2) {
if (leftchild < size && arr[leftchild] < arr[min_index])
min_index = leftchild;
if (rightchild < size && arr[rightchild] < arr[min_index])
min_index = rightchild;
if (min_index != element)
{
swap(arr[element], arr[min_index]);
HeapAdjust(arr, size, min_index);
}
}
}
void BuildHeap(int *arr, int size)
{
for (int i = (size - 1) / 2; i >= 0; i--)
HeapAdjust(arr, size, i);
}
void HeapSort(int *arr, int size)
{
BuildHeap(arr, size);
while (size)
{
swap(arr[0], arr[size - 1]);
size--;
HeapAdjust(arr, size, 0);
}
}
- 上述代码是构建最小堆: