首页 > 代码库 > 数据结构学习(十一)、堆排序
数据结构学习(十一)、堆排序
基本思想:将待排序的序列构成一个大顶堆。此时,最大的值就是堆顶,将它一走,并将余下的序列重新构造成一个堆。如此反复。
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; /* 插入*/ }
数据结构学习(十一)、堆排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。