堆排序
来源:互联网 发布:万影数据 编辑:程序博客网 时间:2024/06/06 00:33
<span style="font-size:18px;">/** * 堆排序,基于优先队列的下沉操作 * @author xxxu * */public class HeapSort {/* * 数组a[0]不参加排序,k和数组索引一一对应了 */public void sort(int[] a){int N=a.length-1;/* * k=N/2; 2k 和 2k+1 就能顾及到所有的元素 * 在下沉过程中,小的下沉,大的就上浮 * 所以到k=1时,下沉后,根节点就是最大的 */for (int k = N/2; k >=1; k--) {sink(a, k, N);}/* * 根节点最大的,和尾结点交换后,此时尾结点就是最大的,N--,尾结点就不需要动了,以此类推 */while(N>1){exch(a, 1, N--);sink(a, 1, N);}}// 下沉private void sink(int[] pq, int k, int N) {while (2 * k <= N) {int j = 2 * k;// 比较左右结点的大小,决定父节点和左结点交换还是有节点交换if (j < N && less(pq,j, j + 1)) {j++;}if (!less(pq,k, j)) {break;}exch(pq,k, j);k = j;}}private boolean less(int[] pq,int i, int j) {if (pq[i] < pq[j]) {return true;} else {return false;}}private void exch(int[] pq,int i, int j) {int t = pq[i];pq[i] = pq[j];pq[j] = t;}public void show(int[] a){for (int i = 0; i < a.length; i++) {System.out.print(a[i]+" ");}System.out.println();}}</span>
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- spark例子
- MaterialEditText android酷炫输入框 框架(基本满足所有需求)
- 2016计划
- NAT穿越方式
- 调用全站相关文章
- 堆排序
- Xcode7 管理工具 Alcatraz
- SKILLS
- iOS闭包block理解
- 淘宝界面总结
- DbGrideh研究
- HDU 3979 Monster(中等贪心)
- 通过canvas获取file照片,并旋转正确角度
- initWithCoder 内Xib中的控件为nil 详解