问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

堆排序的问题高手进

发布网友 发布时间:2022-04-25 05:19

我来回答

1个回答

热心网友 时间:2023-10-29 10:03

以最大堆为例
#define LEFT(i) 2*i
#define RIGHT(i) 2*i+1
/***********以下为堆排序**********/
void MAX_HEAPIFY(keytype *a,int i,int size)
//保持堆的性质,使以i为根的子树成为最大堆
//过程描述:
/*
从元素a[i],a[left(i)],a{right(i)]中找出最大的,并将其下标保存在largest中。如果a[i]是最大的,则以i为根的子树以是最大堆,程序结束。否则,i的某个子结点中有最大元素,则交换a[i]与a[largest],从而使i及其子女满足堆性质。下标为largest的结点在交换后的值是a[i],以该结点为根的子树又有可能违反最大堆性质,因而要迭代这个过程。
*/
{
int largest=-1;
for(;;i=largest)
{
int l=LEFT(i),r=RIGHT(i);
if(l<=size&&a[l-1]>a[i-1])
largest=l;
else
largest=i;
if(r<=size&&a[r-1]>a[largest-1])
largest=r;
if(largest==i)break;

swap(&a[i-1],&a[largest-1]);
}
}
void BUILD_MAX_HEAP(keytype *a,int size)
//子数组a[size/2+1]...a[size]的元素都是叶子,所以只对前面的元素保持堆的性质即可完成建堆
{
int i=size/2;
while(i>=1)
{
MAX_HEAPIFY(a,i--,size);
}
}
void HeapSort(keytype *a,int size)//排序调用函数
{
int i=size;
BUILD_MAX_HEAP(a,size);//先建最大堆
for(;i>=2;--i)//不断的把堆的根即最大元素放到数组尾部并缩小堆的大小,然后再保持堆的性质,迭代这一过程,从而实现升序排列
{
swap(&a[i-1],&a[0]);
--size;
MAX_HEAPIFY(a,1,size);
}
}
以上是我写的堆排序,原理都是一样的,但是结构应该是要清晰一点吧
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
冰箱和冰柜可以挨着放吗 白头发先白头顶是怎么回事 网易云音乐如何将私人FM添加到桌面 网易云音乐私人fm不见了-网易云音乐私人fm在哪里开 网易云私人fm在哪儿 网易云音乐私人fm在哪儿 新能源汽车充电时间多长? 天猫app如何退出登录 手机天猫如何切换账户 天猫切换账号登录方法 天猫可以同时登录几个账号? 有几个学生的数据(学号,姓名,成绩)用堆排序法 以成绩为键值排成升序 堆排序法 (1)冒泡、直插、选择、快速、希尔、归并排序算法进行比较; (2)待排序... 将整数数组按照堆排序的方式原地进行升序排列,请问在整个排序过程 c语言 堆排序算法升序排列N个数 梦见下雪下冰雹预示什么?能安定 梦见下冰雹白茫茫的很厚? 我用微信怎么转账到别人支付宝里 为什么我在爱奇艺追剧时卡到禁止只看到人不会动的那种? 微信怎么转账支付宝 在法国一个lv型号alma包包多少钱? 急,LV ALAM棋盘格 小号(不是ALAM bb),内衬到底是棕色还是红色啊?怎么有些图片是棕色 lv的alma bb老花和棋盘格哪个更好看?选择障碍急求 lv alma bb 哪个颜色好 lv alma bb 漆皮最新香港价格 我在法文LV官网看到Alma bb的欧元价是132000,换算后是约人民币18000,国内 想问一下 现在香港 专柜 LV alma BB 价格是多少 lv alma bb老花变色后好看吗 香港现在LV Alma bb 黄色水波纹多少钱? 谁知道香港LV alam BB卖多少钱呐.颜色全吗 哪个店的货全一点呢 谢谢 什么是投保金额保险费 一个以语言把数组中元素升序排列的问题? 保险金额和保险费用的关系 已知关键字序列(56,30,71,29,97,83,74,64,76,48),采用堆排序算法进行递增排序,给出前5各趟排 保险金额 保险价值 保险费 快速、堆排序算法,能用的来,不能用的免语 堆排序是什么? 已知一组记录为(46,74,53,14,26,38,86,65,27,34)给出采用堆排序法进行排序时每一趟的排序结果 盈余公积根据什么提取的?比例是多少? 提取法定盈余公积金多少 求问盈余公积与资本公积的分配比例和利润比例是多少 法定盈余公积金的提取比例一般是? 法定盈余公积.任意盈余公积.法定公益金提取的比例 资本公积盈余公积的提取比例 DHCP无法获得IP地址有几种原因? 配置好了DHCP服务器,但是却无法自动获取IP 路由器上面开启了DHCP服务,为什么电脑却不能自动获取IP地址 路由器上面开启了DHCP服务,为什么电脑却不能自动获取IP地址? DHCP服务开启但为什么还是无法自动获得IP地址 福字的寓意和象征是什么?