#include <stdio.h> #include <stdlib.h> void show(int *p, int size) { for (int i = 0; i < size; i++) { printf("%4d", p[i]); } printf(" "); } 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"); }