堆积排序是指利用堆积树(堆)这种资料结构所设计的一种排序算法,可以利用数组的特点快速定位指定索引的元素。
堆可以被看成是一棵树,结点在堆中的高度可以被定义为从本结点到叶子结点的最长简单下降路径上边的数目;定义堆的高度为树根的高度。我们将看到,堆结构上的一些基本操作的运行时间至多是与树的高度成正比,为O(lgn)。
堆排序的算法代码实现(最大堆实现):
//build max heaps
void Build_Max_Heap(int *a,int i,int n)
{
int largest=0;
int l=2*i;
int r=2*i+1;
if(l<n&&a[l]>=a[i])
largest=l;
else
largest=i;
if(r<n&&a[r]>=a[largest])
largest=r;
if(largest!=i)
{
int b=a[i];
a[i]=a[largest];
a[largest]=b;
Build_Max_Heap(a,largest,n);
}
}
//build heap
void buildHeap(int *a,int len)
{
int i;
for(i=len/2;i>=1;i--)
Build_Max_Heap(a,i,len);
}
//heap sort
void HeapSort(int *a,int len)
{
int i;
for(i=len;i>=2;i--)
{
int b=a[i];
a[i]=a[1];
a[1]=b;
Build_Max_Heap(a,1,--len);
}
}
堆排序的典型应用:
最大优先级队列是最大堆的典型应用。用于分时计算机上的作业调度,这种队列对要执行的作业及它们之间的相对优先关系 记录。