堆排序(java)
阿新 • • 發佈:2018-12-15
是直接利用堆結構的特性進行構造的
直接上程式碼:
package Heap; public class HeapSort { public static void heapSort(int[] arr) { if (arr.length<2||arr==null) { return; } //根據待排序陣列生成堆結構 for (int i = 0; i < arr.length; i++) { HeapInsert(arr,i); } //將堆最後一個與堆頂進行交換 int size=arr.length; change(arr, 0, --size); while (size>0) { heapfiy(arr,0,size); change(arr, 0, --size); } } private static void heapfiy(int[] arr, int index,int size) { int leftChild=2*index+1; while (leftChild<size) { int largest=(((leftChild+1)<size)&&(arr[leftChild+1]>arr[leftChild])) ?leftChild+1:leftChild; largest=(arr[index]<arr[largest])?largest:index; if (largest==index) { break; } change(arr, largest, index); index=largest; leftChild=2*index+1; } } private static void HeapInsert(int[] arr, int index) { //用於將所有的父節點都比較一下 while (arr[index]<arr[(index-1)/2]) { change(arr, index, (index-1)/2); index=(index-1)/2; } } //定義交換方法 public static void change(int[] arr,int i,int j) { int tem=arr[i]; arr[i]=arr[j]; arr[j]=tem; } }