算法:先生成随机数,赋值到数组,将数组第一个元素a[0]设置为哨兵,函数调用数组和随机数个数n,再设定n/2的根结点与孩子结点进行比较操作,若右孩子存在,则选出三个数里最小的数赋值给根节点,如果右孩子不存在,则只需比较左孩子与根节点大小,一直循环操作至a[1],再从a[2]开始进行根结点与孩子结点进行比较操作,一直到n/2为止,最后,依次输出a[1],输出后将a[n]赋值给a[1];再进行递归操作,重复以上步骤,直至数组为空
要点:画出二叉树是方便理解,并非数据的结构就是如同二叉树那般存储,存储形式还是一排
编译器:VS2013
代码
1 #include "stdafx.h" 2 #include<stdlib.h> 3 4 //函数声明 5 void HeapSort(int a[], int n); //堆排序(从小到大) 6 void HSort(int a[], int n); //辅助堆排序 7 void Change(int &a, int &b); //值互换 8 9 int main() 10 { 11 int i, n, a[100]; 12 13 printf("请输入需要排序元素的个数:"); 14 scanf_s("%d", &n); 15 16 printf("随机生成的数组为:"); 17 for (i = 1; i <= n; i++) 18 { 19 a[i] = rand() % 100 + 1; 20 printf("%d ", a[i]); 21 } 22 23 a[i] = '