這里沒有對(duì)0號(hào)元素進(jìn)行排序
// 堆排public class Heap { public static boolean less(Comparable array[], int i, int j){ return array[i].compareTo(array[j]) < 0; } public static void exec(Comparable array[], int i, int j) { Comparable t = array[i]; array[i] = array[j]; array[j] = t; } // 下沉 PRivate static void sink(Comparable[] array, int k, int N){ while(2*k <= N) { int j = 2 * k; if(j<N && less(array, j, j+1)) j++; if(!less(array,k,j)) break; exec(array,k,j); k = j; } } public static void sort(Comparable[] array) { int N = array.length-1; // 將數(shù)組調(diào)整為最大堆 for (int i=N/2; i>=1; i--) { sink(array, i, N); } // 拆掉堆排序數(shù)組,并將數(shù)組調(diào)整為從小到大的順序 // 依次將最大的堆頂調(diào)整到數(shù)組末尾 while (N > 1) { exec(array, 1, N--); sink(array,1, N); } } public static void main(String[] args) { Integer[] array = new Integer[]{0,1,2,3,4}; sort(array); for(int i=0; i<array.length; i++) { System.out.println(array[i]); } }}新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注