首页 > 编程语言 > 详细

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

时间:2016-10-17 11:25:42      阅读:217      评论:0      收藏:0      [点我收藏+]

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

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;                           /* 插入*/
}

 

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

原文:http://www.cnblogs.com/huixuexidezhu/p/5968816.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!