JAVA堆排序(HEAP-SORT)

public class HeapSort {
    public static void heapSort(int[] array) {
        if (null == array || array.length < 2) {
            return;
        }
        int index;
        for (int i = 0; i < array.length; i++) {
            index = array.length - i - 1;
            maxHeap(array, index);
            if (index != 0) {
                array[0] ^= array[index];
                array[index] ^= array[0];
                array[0] ^= array[index];
            }
        }
    }

    private static void maxHeap(int[] array, int lastIndex) {
        int k;
        int index = (lastIndex - 1) / 2;
        for (int i = index; i > -1; i--) {
            k = i;
            while (2 * k <= lastIndex - 1) {
                int biggerIndex = 2 * k + 1;
                if (biggerIndex < lastIndex && array[biggerIndex] < array[biggerIndex + 1]) {
                    biggerIndex++;
                }
                if (array[k] < array[biggerIndex]) {
                    array[k] ^= array[biggerIndex];
                    array[biggerIndex] ^= array[k];
                    array[k] ^= array[biggerIndex];
                    k = biggerIndex;
                } else {
                    break;
                }
            }
        }
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 堆排序是一種樹形選擇排序,是對直接選擇排序的有效改進。 基本思想: 堆頂元素(即第一個元素)必為最小項(小頂堆)或...
    NEXTFIND閱讀 884評論 0 1
  • 堆排序算法,基于選擇排序的思想,利用堆結構的性質來完成對數據的排序。 前提準備: 什么是堆結構:堆數據結構是一種數...
    noonbiteun閱讀 587評論 0 3
  • 1、為什么要使用堆? 首先我們可以理解一下堆和棧之間的區別,第一從空間的分配來看的話,堆是手動申請和釋放空間,一般...
    老實李閱讀 848評論 0 3
  • 二叉堆 這個二叉堆和先進后出的那個堆不是一個。而且這個二叉堆從下標1開始存儲元素。 這里的二叉堆是個數組,也可以看...
    Myth52125閱讀 517評論 0 0
  • 昨天看到一個關于運營的筆記,是別人用了2年的經驗總結出來的,這篇文章純干貨,也帶有我自己的一些理解。 最后總結出這...
    小夕薇閱讀 871評論 8 33