排序——堆排序
2016-05-16 15:24
267 查看
优先队列可以用于0(N*logN)时间的排序。
若使数组按从小到大顺序排序,则需构建最大堆Max。
堆排序步骤:
1.若使数组按从小到大顺序排序,则需构建最大堆Max;
2.使用需要排序的数组以线性时间建立一个堆;
3.然后通过每次将堆中的最后元素与第一个元素交换,执行N-1次deleteMax操作,每次将堆的大小缩减1并进行下滤。
若使数组按从小到大顺序排序,则需构建最大堆Max。
堆排序步骤:
1.若使数组按从小到大顺序排序,则需构建最大堆Max;
2.使用需要排序的数组以线性时间建立一个堆;
3.然后通过每次将堆中的最后元素与第一个元素交换,执行N-1次deleteMax操作,每次将堆的大小缩减1并进行下滤。
//swap函数; public void swap(int[] data,int i,int j) { int temp=data[i]; data[i]=data[j]; data[j]=temp; } //对非叶子节点的所有结点进行下滤; *对堆insert时才使用上滤操作* public void percolateDown(int[] data,int i,int n) { int temp=data[i]; int child; for(; 2*i+1<n; i=child) { child=2*i+1;//leftchild; if(child<n-1&&data[child]<data[child+1]) child++;//rightchild; if(data[child]>temp) data[i]=data[child]; else break; } data[i]=temp; } public void heapSort(int[] data) { //建max堆; for(int i=data.length/2;i>=0;i--) { percolateDown(data,i,data.length); } for(int i=data.length-1;i>0;i--) { swap(data,0,i);//i为当前堆中最后的元素; percolateDown(data,0,i);//i也为将堆缩减1后堆的大小; } }
相关文章推荐
- Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web mod
- loadrunner监控iis指标
- android的数据存储的方式
- OC语言笔记(五):OC封装和复合
- ACE框架整合记录4Dialog插件-【完结】
- JAVA——集合变数组
- 2016-5-16-2
- 自定义圆形头像CircleImageView
- 设计模式——单例模式
- RDD之flatMap与Map对比
- 使用pscp在Linux和Windows上传输数据可能存在的问题
- loadrunner 监控linux
- OC语言笔记(四):OC点语法、继承、类别
- [IOS笔记] - addChildViewController
- nodejs实践-代码组织
- JAVA中线程的状态
- CGI getenv 参数
- [Javascript] Grouping and Nesting Console Log Output
- XMPP协议实现原理介绍
- php pdo oracle中文乱码的快速解决方法