堆排序------最大堆进行排序为例
2015-01-06 19:59
344 查看
<span style="font-size:18px;">#include<iostream> using namespace std; void maxheapify(int A[],int i,int length) { int left,right,largest; bool flag=true; while(flag&&i<=length) { left=i*2; right=left+1; largest=i; flag=false; if(left<=length&&A[i]<A[left]) { largest=left; flag=true; } if(right<=length&&A[largest]<A[right]) { largest=right; flag=true; } int temp=A[i]; A[i]=A[largest]; A[largest]=temp; i=largest; } } void heap_sort(int A[],int n) { int length=n; while(length>1) { int temp=A[length]; A[length]=A[1]; A[1]=temp; length=length-1; maxheapify(A,1,length); } } int main() { int n; int p[100]; while(cin>>n) { int length=n; for(int i=1;i<=n;i++) cin>>p[i]; for(int i=length/2;i>=1;i--)//构造一个堆 maxheapify(p,i,n); for(int i=1;i<=length;i++)//二叉堆形似一颗完全二叉树,可以输出进行判断 cout<<p[i]<<" "; cout<<endl; heap_sort(p,n);//进行堆排序 for(int i=1;i<=length;i++) cout<<p[i]<<" "; cout<<endl; } return 0;</span> }
相关文章推荐
- 数组操作,将数组排序,然后按最大-最小-第二大-第二小。。。。进行
- LINQ分组时如何进行组内排序?另外如何仅返回每组中满足条件的行(如Id最大的)?
- 对数组进行排序、求最大值和求元素和的算法都编写为函数模板,采用相关数据进行测试。
- Go语言用堆排序的方法进行一千万个int随机数排序.
- 用java面向对象(oop)对成绩进行排序,查找最大值,最小值,平均值。
- 对1000000个数进行排序找出10个最大的数
- 通过Collections对list进行排序、取最大、取最小等操作
- 编写一个使用数组类模板Array对数组进行排序、求最大值和求元素和的程序,并采用相关数据进行测试。
- 对数组进行排序、求最大值和求元素和的算法都编写为函数模板,采用相关数据进行测试。
- 有k个list列表, 各个list列表的元素是有序的,将这k个列表元素进行排序( 基于堆排序的K路归并排序)
- 用sort()方法对数组的元素进行排序(可按字母升序降序与获得最大最小值)
- 最近在写的赫夫曼树、B树、二项堆等都会用到堆排序,所以把最大堆排序和最小堆排序一次性先给大家看看
- 通用的泛型Icomparer生成类,对类进行排序,最大支持4个字段同时比较
- 6.对数组进行排序、求最大值和求元素和的函数采用静态成员函数的方式封装成数组算法类模板ArrayAlg,并采用相关数据进行测试。
- 02_对N个长度最长可达到1000的数进行排序、对给定的一个字符串,找出有重复的字符,并给出其位置、输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序
- 一道面试题:对一个数组进行排序,要求第一个最大、第二
- 通用的泛型Icomparer生成类,对类进行排序,最大支持4个字段同时比较
- 已知一数组,按第一个数最大第二个数最小,依次下去进行的规则排序
- 有一个LIst 对象 对他进行排序 输出最大值最小 for循环
- Java构建Heap,进行Heap 排序(堆排序)