排序算法系列----堆排序(C++)
来源:互联网 发布:网络利大于弊的辩论词 编辑:程序博客网 时间:2024/06/06 02:39
个人总结理解堆排序的关键点:
1.堆:首先,堆是一种完全二叉树,并且,每个节点的值都大于或等于其左右孩子节点的值,称为大顶堆;或者每个孩子节点的值都小于或等于其左右孩子节点的值,称为小顶堆;
2.基本思想:将待排序的序列先构造成大顶堆。利用大顶堆的特点(最大值在根节点),根节点的值与堆数组的末尾元素进行交换,此时末尾元素就是最大值,然后将剩余的元素重新调整成一个大顶堆,此时根节点上是当前序列的最大值(整个序列的次大值),然后将根节点元素与末尾元素进行交换,如此循环进行,即可完成排序。
3.如何由一个无序序列构造成一个大(小)顶堆。
4.输出堆顶元素后,剩余元素调整成一个新的大(小)顶堆。
C++实现代码:
# include <iostream># define SIZE 10using namespace std;void HeapAdjust(int a[],int s,int m){ int j,temp; temp = a[s]; for (j=2*s;j<=m;j*=2) { if (j<m&&a[j]<a[j+1]) { ++j; } if (temp>a[j]) break; a[s] = a[j]; s = j; } a[s] = temp;}void swap(int sort[],int p,int q){ int temp; temp = sort[p]; sort[p] = sort[q]; sort[q] = temp;}void HeapSort(int a[],int length){ int i; for (i=length/2;i>0;i--) { HeapAdjust(a,i,length); } for (i=length;i>1;i--) { swap(a,1,i); HeapAdjust(a,1,i-1); }}void main(){ int num; int sort[SIZE] = {0,50,10,90,30,70,40,80,60,20}; HeapSort(sort,SIZE-1); for (num=1;num<SIZE;num++) { cout<<sort[num]<<" "; }}
理解的方法同样,自己构造序列,然后模拟计算机运行,理解这个算法。
0 0
- 排序算法系列----堆排序(C++)
- C语言算法系列:堆排序
- 排序算法系列:堆排序(heapsort)(C语言)
- 排序算法 - 堆排序 (C++)
- 【c++】堆排序算法
- C算法--堆排序
- [算法系列之一]堆排序
- [算法系列之一]堆排序
- 算法系列—堆排序
- 七大排序算法系列之堆排序
- 排序算法系列之堆排序
- 排序算法系列之堆排序
- 排序算法系列——堆排序
- 算法 - 堆排序(C#)
- 堆排序算法(C语言)
- 排序算法c语言描述---堆排序
- 排序算法(C实现)--------- 堆排序
- 排序系列- 堆排序
- Android MVP与MVC框架模式
- java剧院管理系统,数据存储mysql
- uboot 命令使用教程(uboot参数设置)
- Qt5 中文显示
- Android——ContentProvider总结
- 排序算法系列----堆排序(C++)
- Apache POI 第三讲之对Excel单元格的操作
- DBCP连接池配置参数说明
- Activity在AndroidManifest中的一些配置属性
- 【SSH系列】静态代理&&动态代理
- 什么是用户代理?
- 服务器基础配置(Redhat/CentOS)
- 在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组
- JS Tab切换 选项卡 五种方法