1. 程式人生 > 其它 >13.2:堆排序

13.2:堆排序

13.2:堆排序

  理解了堆以及堆裡面的heapInsert() 和heapify(),堆排序就簡單了。

  1、把陣列中的所有數都調成大根堆。heapSize = N。

  2、0位置的數和N-1位置的數進行交換。heapSize = N - 1。N - 1位置和堆斷開,N-1位置輸出

  3、從0位置到N-2位置進行heapify,調成大根堆。

  4、0位置的數和N-2位置的數進行交換。heapSize --。N - 2位置和堆斷開,N-2位置輸出

  5、。。。

  6、直到heapSize  == 0;

    // 堆排序額外空間複雜度O(1)
    public static void
heapSort(int[] arr) { if (arr == null || arr.length < 2) { return; } for (int i = 0; i < arr.length; i++) { // O(N) heapInsert(arr, i); } int heapSize = arr.length; swap(arr, 0, --heapSize); // O(N*logN) while
(heapSize > 0) { // O(N) heapify(arr, 0, heapSize); // O(logN) swap(arr, 0, --heapSize); // O(1) } }