堆積排序是指利用堆積樹(堆)這種資料結構所設計的一種排序算法,可以利用數組的特點快速定位指定索引的元素。
堆可以被看成是一棵樹,結點在堆中的高度可以被定義爲從本結點到葉子結點的最長簡單下降路徑上邊的數目;定義堆的高度爲樹根的高度。我們將看到,堆結構上的一些基本操作的運行時間至多是與樹的高度成正比,爲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);
}
}
堆排序的典型應用:
最大優先級隊列是最大堆的典型應用。用於分時計算機上的作業調度,這種隊列對要執行的作業及它們之間的相對優先關係 記錄。