堆排序的思想这里就先不讲了,以后有时间再补上,下面是分别采用大顶堆和小顶堆实现的堆排序。
注意:下面例子中排序的数字是{1,2,5,3,6,4,9,7,8}。
大顶堆方式
#include <iostream>
#include <stdlib.h>
using namespace std;
//堆调整
//将nums[s..m]调整为大顶堆,其中除了nums[s]之外均满足大顶堆的定义
void HeapAdjust(int nums[],int s, int m)
{
int j;
nums[0] = nums[s]; //nums之后跟新为该节点作为根节点的所有子孙的关键字最大值
for(j = 2 * s;j <= m;j *=2 ) //沿着关键字较小的孩子向下筛选
{
if(j < m && nums[j] < nums[j + 1])
j++; //j为关键字中较大的记录的下标
if(nums[