#include <stdio.h>
#include <stdlib.h>
void show(int *p, int size)
{
for (int i = 0; i < size; i++)
{
printf("%4d", p[i]);
}
printf("\n");
}
void findMax(int *arr,int size)
{
for (int j = size - 2; j>0; j--)//从尾循环到头部
{
int parent = j / 2;//父节点位置
int child = j;//记录当前下标
if (j < size - 1 && arr[j] < arr[j + 1])
{
child++;
}
if (arr[child]>arr[parent])//最大值登顶
{
int temp = arr[child];
arr[child] = arr[parent];
arr[parent] = temp;
}
}
}
void heapSort(int *arr, int size)
{
for (int j = size; j > 0; j--)
{
findMax(arr, j);
//找到一个最大的放在最后 然后交换 然后再找到一个最大的放在最后
int temp = arr[0];
arr[0] = arr[j - 1];
arr[j - 1] = temp;
}
}
void main()
{
int a[10] = { 10, 13, 20, 12, 30, 14, 50, 196, 60 ,29};
show(a, 10);
heapSort(a, 10);
show(a,10);
system("pause");
}