选择排序_堆排序
程序代码:
void HeapAdjust(Elem R[],int s,int m)
{
rc = R[s];
for(i = 2*s;i <= m; i++) //查找rc应插入的位置
{
if((i < m && R[i]<R[i+1])
i++; //i为左右子树较大记录的下标
if(rc > R[i])
break;
R[s] = R[i];
s = i;
}
R[s] = rc;
}
void HeapSort(Elem R[],int n)
{
for(i = n/2;i > 0 ;i--) //建立大顶堆
HeapAdjust(R,i,n);
for(i = n;i > 1;i--)
{
swap(R[1],R[i]); //将堆顶记录和当前未经排序子序列R[1,--,i]中的最后一个记录交换
HeapAdjust(R,1,i-1); //对R[1]进行筛选,选出未排序子序列R[1,--,i]中的最大值
}
}
时间复杂度:O(nlogn)。
稳定性:不稳定。