算法之排序:堆排序
public static void swap(int[] arr,int i,int j){ int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } public static void heapInsert(int[] arr,int curr){ while(arr[curr]>arr[(curr-1)/2]){ swap(arr,curr,(curr-1)/2); curr=(curr-1)/2; } } public static void heapify(int[] arr,int index,int size){ while(index*2+1<=size){ int left=index*2+1; int right=left+1; int largest=right<=size && arr[right]>arr[left] ? right:left; largest=arr[largest]>arr[index] ? largest : index; if(arr[largest]<=arr[index]){ return; } swap(arr,largest,index); index=largest; } } public static void heapSort(int[] arr){ if (arr == null || arr.length < 2) { return; } for(int i=0;i<arr.length-1;i++){ heapInsert(arr,i); } int size=arr.length-1; while(size>0){ swap(arr,0,size--); heapify(arr,0,size); } }