堆排序
2014-03-29 15:25
141 查看
public class MyHeapSort { private static void OutPrint(int nums[]) { for(int i:nums) System.out.print(i+" "); System.out.println(); } public static void main(String[] args) { int numbers[]=new int[]{1,5,2,7,4,2,8,34}; OutPrint(numbers); HeapSort(numbers); OutPrint(numbers); } private static void HeapSort(int[] numbers) { buildHeap(numbers); //建堆 for(int i=numbers.length-1;i>0;i--) //交换 { int temp=numbers[0]; numbers[0]=numbers[i]; numbers[i]=temp; adjustHeap(numbers,0,i); } } private static void adjustHeap(int[] numbers, int i, int size) { //调整 int j=i*2+1; //左孩子节点 while(j<size) { if(j+1<size&&numbers[j]<numbers[j+1]) j++; if(numbers[i]<numbers[j]) //孩子节点大于父亲节点 { int temp=numbers[i]; numbers[i]=numbers[j]; numbers[j]=temp; i=j; } else break; j=2*i+1; //深入下去 } } private static void buildHeap(int[] numbers) { for(int i=numbers.length/2-1;i>=0;i--) { adjustHeap(numbers,i,numbers.length); } } }