堆排序(Heap Sort)是对简单选择排序的一种改进。
堆是具有下列性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。
堆排序就是利用堆(假设利用大顶堆)进行排序的方法。它的基本思想是,将待排序的序列构造成一个大顶堆,此时整个序列的最大值就是堆顶的根结点。将它移走,然后将剩余的n-1个序列重新构造称一个堆,这样就会得到n-个元素中的次大值。如此反复执行,便能得到一个有序序列了。
以下程序在DEV C++中调试运行通过。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
int r[10];
int length;
}SqList;
void swap(SqList *L,int i,int j)
{
int temp=L->r[i];
L->r[i]=L->r[j];
L->r[j]=temp;
}
void HeapAdjust(SqList *L,int s,int m)
{
int temp,j;
temp=L->r[s];
for(j=2*s;j<=m;j*=2)
{
if(j<m&&L->r[j]<L->r[j+