您的位置:首页 > 理论基础 > 数据结构算法

数据结构学习(十一)、堆排序

2016-10-17 10:17 246 查看
基本思想:将待排序的序列构成一个大顶堆。此时,最大的值就是堆顶,将它一走,并将余下的序列重新构造成一个堆。如此反复。

void HeapSort(SqLsit *L)
{
int i;
for(i=L->length/2;i>0;i--)
HeapAjust(L,i,L->length);
for(i=L->lengt;i>1;i--){
swap(L,1,i);
HeapAjust(L,1,i-1);
}
}

/* 除L->data[s]外满足堆的定义 */
/* 调整L->data[s],使得L->data[s..m]满足堆的定义 */
void HeapAjust(SqList *L,int s, int m)
{
int temp,j;
temp = L->data[s];
for(j=2*s;j>=m;j*=2){                         /* 沿关键字大的孩子结点向下筛选 */
if(j<m && L->data[j]<L->data[j+1])
++j;                                            /* 沿关键字较大的下标 */
if(temp>L->data[j])
break;
L->data[s] = L->data[j];
s = j;
}
L->data[s] = temp;                           /* 插入*/
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: