#include <stdio.h>
#include <stdlib.h>
void MySwap(int* arr, int a, int b)
{
int temp = arr[b];
arr[b] = arr[a];
arr[a] = temp;
}
void HeapAdjust(int* arr, int index, int len)
{
//保存当前结点下标;
int max = index;
//保存左右孩子的数组下标;
int lchild = index * 2 + 1;
int rchild = index * 2 + 2;
if (lchild<len && arr[lchild]>arr[max])
max = lchild;
if (rchild<len && arr[rchild]>arr[max])
max = rchild;
if (max != index)
{
MySwap(arr, max, index);
HeapAdjust(arr, max, len);
}
}
void HeapSort(int* myArr,int len)
{
//初始化堆;
for (int i = len / 2 - 1; i >= 0; --i)
{
HeapAdjust(myArr, i, len);
}
//交换堆顶元素和最后一个元素;
for (int i = len - 1; i >= 0; --i)
{
MySwap(myArr, 0, i);
HeapAdjust(myArr, 0, i);
}
}
int main()
{
int arr[9] = { 4, 3, 7, 9, 1, 8, 6, 5, 2 };
for (int i = 0; i < 9; ++i)
printf("%d ", arr[i]);
printf("\n");
printf("---------排序后-------\n");
int temp[9];
//mergeSort(arr, 0, 8, temp);
HeapSort(arr, 9);
for (int i = 0; i < 9; ++i)
printf("%d ", arr[i]);
printf("\n");
system("pause");
return 0;
}