堆排序(大根堆)
Posted Jesseylove
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆排序(大根堆)相关的知识,希望对你有一定的参考价值。
package algorithm; public class LargeHeapSort { /** * 对数组进行调整,使得arr[low]成为low-len最大的 * @param arr * @param low 当前二叉树(堆的一部分)的根 * @param len 数组的长度 */ public static void sift(int[] arr,int low,int len) { int i=low; int j=2*i+1; int temp=arr[low]; while(j<len) { if(j<len-1&&arr[j]<arr[j+1]) j++; if(temp<arr[j]) { arr[i]=arr[j]; i=j; j=2*i+1; } else j=len+1; } arr[i]=temp; } /** * 大根堆排序,先将arr数组调整成大根堆,然后依次输出堆中最大的元素 * 调整成大根堆:从最后一个非叶结点为根调整数组,依次往前调整 * 输出大根堆:将树根与最后一个结点交换后,输出最后一个结点,然后重新调整成大根堆 * @param arr * @param len 数组长度 */ public static void sort(int[] arr,int len) { int temp; for(int i=len/2-1;i>=0;i--)//(len/2-1)是最后一个非叶子结点位置 { sift(arr,i,len); } for(int i=len-1;i>0;i--) { temp=arr[0]; arr[0]=arr[i]; arr[i]=temp; System.out.print(temp+" "); sift(arr,0,i); } System.out.print(arr[0]); } public static void main(String[] args) { int[] arr= {999,555,5,8,1,55,74,75,78,10,78}; sort(arr,arr.length); } }
以上是关于堆排序(大根堆)的主要内容,如果未能解决你的问题,请参考以下文章