堆排序
for循环构造堆,接着while循环交换最大元素与数组的最后一个元素,并修正堆。继续这一过程直到堆为空。
void heapsort(Item a[],int l,int r) { int k; int N = r-l+1;//数组中节点个数 Item *pq = a+l-1;//pq指针指向数组末尾 for(k=N/2;k>=1;k--)//自底向上构造堆 fixDown(pq,k,N); while(N>1)//不断交换最大元素 与 数组中最后一个元素,并修正堆 { exch(pq[1],pq[N]); fixDown(pq,1,--N); } }