堆排序菜鸟入门
发布日期:2021-06-30 10:11:55 浏览次数:2 分类:技术文章

本文共 1026 字,大约阅读时间需要 3 分钟。

了解过快速排序和归并排序之后,还有一个比较实用而且和前两者的时间效率相同的排序自然要学习一下了。

在有了那么多高手的博客,我还写这个,主要是为了自学,加个原创是为了有激情哈哈

直接来

实例: Arr[14] = {9,8,5,2,1,4,7,6,3,0,15,5,9,4};将该数组进行堆排序。

首先,讲二叉堆的两个性质

就是求最后一个非叶子节点,和父子节点的关系。

Arr[14] = {9,8,5,2,1,4,7,6,3,0,15,5,9,4}    的二叉堆是:

接着:

获得第一个有序的二叉堆比较复杂,之后每次只需要将用来交换的分支排序即可

代码,参考百度百科,与上图一一对应》》》》》

#include 
//建堆void HeapAdjust(int array[],int i,int nLength){ int nChild; int nTemp; //1.如果左子节点存在的话,左右子节点进行比较然后,得出较大的Array[nChild] //2.将较大的子节点与该父节点比较,大于父节点则交换,小于则退出。 //3.将与父节点交换的子节点作为父节点循环,目的是取出该分支剩下的最大的值 //4.直到没有子节点为止 for(;2*i+1
array[nChild]) ++nChild; if(array[i]
=0;i--) HeapAdjust(array,i,length); //第二步,每次交换堆顶值,然后排序。 for(i=length-1;i>0;i--) { array[i]=array[0]^array[i]; array[0]=array[0]^array[i]; array[i]=array[0]^array[i]; HeapAdjust(array,0,i); }}int main(){ int i; int num[]={9,8,5,2,1,4,7,6,3,0,15,5,9,4}; HeapSort(num,sizeof(num)/sizeof(num[0])); for(i=0;i

只是学习,多有不足,只能上了。

转载地址:https://islet.blog.csdn.net/article/details/76552147 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:动态库和静态库的区别(转)
下一篇:sizeof()为什么不能得到指针指向内容的大小

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月13日 15时33分53秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章