c语言经典排序算法(8种-含源代码)(7)

发布时间:2021-06-06

鸡尾酒配方

* 将其与序列的最后一个元素交换,将序列长度减一;

* 再将序列建成堆(堆调整)后,堆顶元素仍是序列中的最大元素,再次将其与序列最后一个元素交换并缩短序列长度;

* 反复此过程,直至序列长度为一,所得序列即为排序后结果。

**************************************************************/

void HeapAdjust(int data[],int s,int m) /* 排列成堆的形式 */

{

int j,rc;

rc=data[s]; /* 保存处理元素 */

for(j=2*s;j<=m;j*=2) /* 处理父亲元素 */

{

if(j<m && data[j]<data[j+1]) ++j; /* 取较大的孩子节点 */

if(rc>data[j]) break;

data[s]=data[j]; /* 父节点比较大的孩子节点大则互换 ,保证父节点比所有子节点都大(父节点存储在前面)*/

s=j;

}

data[s]=rc; /* 相当于data[j]=rc */

}

void Heap_sort(int data[],int long_n) /* 堆排序函数 */

{

int i,temp;

for(i=long_n/2;i>0;--i) /* 还没有读懂这样处理的原因,希望大家不吝赐教 */ {

HeapAdjust(data,i,long_n); /* 处理后,data[i]是这个数组后半部分的最大值 */ }

for(i=long_n;i>0;--i)

{

temp=data[1]; /* 把根元素(剩下元素中最大的那个)放到结尾 ,下一次只要排剩下的数就可以啦*/

data[1]=data[i];

data[i]=temp;

HeapAdjust(data,1,i-1);

}

}

每个算法有什么优缺点,可以参照百度文库

地址:

/view/c3054c0f7cd184254b353516.html

c语言经典排序算法(8种-含源代码)(7).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219