選擇排序---堆排序

二叉堆的定義

二叉堆是完全二叉樹或者是近似完全二叉樹。
二叉堆滿足兩個特性:

  • 父節(jié)點的鍵值總是大于或等于(小于或等于)任何一個子節(jié)點的鍵值
  • 每個節(jié)點的左子樹和右子樹都是一個二叉堆(都是最大堆或最小堆)
    當父節(jié)點的鍵值總是大于或等于任何一個子節(jié)點的鍵值時為最大堆裸诽。當父節(jié)點的鍵值總是小于或等于任何一個子節(jié)點的鍵值時為最小堆。下圖展示一個最小堆:


    11B3620D-3236-4882-89D8-0E45CDA8A62D.png

堆的存儲

一般都用數(shù)組來表示堆,i節(jié)點的父節(jié)點下標為(i-1)/2旗笔。它的左右子節(jié)點下標分別為2i+1和2i+2倒脓。如第0個節(jié)點左右子節(jié)點下標分別為1和2.

1A2BD5F2-D816-4846-A220-5C068D3C132C.png

java代碼

public static void heapSort(int[] arr) {
        // 將待排序的序列構(gòu)建成一個大頂堆
        for (int i = arr.length / 2; i >= 0; i--) {
            heapAdjust(arr, i, arr.length);
        }

        // 逐步將每個最大值的根節(jié)點與末尾元素交換,并且再調(diào)整二叉樹里伯,使其成為大頂堆
        for (int i = arr.length - 1; i > 0; i--) {
            swap(arr, 0, i); // 將堆頂記錄和當前未經(jīng)排序子序列的最后一個記錄交換
            heapAdjust(arr, 0, i); // 交換之后城瞎,需要重新檢查堆是否符合大頂堆,不符合則要調(diào)整
        }
    }

    /**
     * 構(gòu)建堆的過程
     *
     * @param arr 需要排序的數(shù)組
     * @param i   需要構(gòu)建堆的根節(jié)點的序號
     * @param n   數(shù)組的長度
     */
    private static void heapAdjust(int[] arr, int i, int n) {
        int currentIndex = i;
        while (currentIndex <= n / 2 - 1) {
            int leftChildIndex = currentIndex * 2 + 1;
            int maxChildIndex = leftChildIndex;
            if (leftChildIndex < n - 1) {
                if (arr[leftChildIndex] < arr[leftChildIndex + 1]) {
                    maxChildIndex = leftChildIndex + 1;
                }
            }
            if (arr[currentIndex] < arr[maxChildIndex]) {
                int temp = arr[currentIndex];
                arr[currentIndex] = arr[maxChildIndex];
                arr[maxChildIndex] = temp;
                currentIndex = maxChildIndex;
            } else {
                break;
            }
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疾瓮,一起剝皮案震驚了整個濱河市脖镀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌爷贫,老刑警劉巖认然,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異漫萄,居然都是意外死亡卷员,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門腾务,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毕骡,“玉大人,你說我怎么就攤上這事岩瘦∥次祝” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵启昧,是天一觀的道長叙凡。 經(jīng)常有香客問我,道長密末,這世上最難降的妖魔是什么握爷? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任跛璧,我火速辦了婚禮,結(jié)果婚禮上新啼,老公的妹妹穿的比我還像新娘追城。我一直安慰自己,他們只是感情好燥撞,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布座柱。 她就那樣靜靜地躺著,像睡著了一般物舒。 火紅的嫁衣襯著肌膚如雪色洞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天茶鉴,我揣著相機與錄音锋玲,去河邊找鬼。 笑死涵叮,一個胖子當著我的面吹牛惭蹂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播割粮,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼盾碗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了舀瓢?” 一聲冷哼從身側(cè)響起廷雅,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎京髓,沒想到半個月后航缀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡堰怨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年芥玉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片备图。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡灿巧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出揽涮,到底是詐尸還是另有隱情抠藕,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布蒋困,位于F島的核電站盾似,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏雪标。R本人自食惡果不足惜颜说,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一购岗、第九天 我趴在偏房一處隱蔽的房頂上張望汰聋。 院中可真熱鬧门粪,春花似錦、人聲如沸烹困。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽髓梅。三九已至拟蜻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間枯饿,已是汗流浹背酝锅。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奢方,地道東北人搔扁。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像蟋字,于是被迫代替她去往敵國和親稿蹲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 參考鏈接 選擇排序:簡單選擇排序(Simple Selection Sort) 白話經(jīng)典算法系列之四 直接選擇排序...
    夢即是幻閱讀 367評論 0 0
  • 堆排序是一種樹形選擇排序鹊奖,是對直接選擇排序的有效改進苛聘。 基本思想: 堆頂元素(即第一個元素)必為最小項(小頂堆)或...
    NEXTFIND閱讀 869評論 0 1
  • 與簡單選擇排序的關(guān)系 簡單選擇排序過程有這個問題:在待排序的n個記錄中選擇一個最小的記錄需要比較n-1次。這樣的操...
    官先生Y閱讀 532評論 0 1
  • 1 序 2016年6月25日夜忠聚,帝都设哗,天下著大雨,拖著行李箱和同學在校門口照了最后一張合照两蟀,搬離寢室打車去了提前租...
    RichardJieChen閱讀 5,098評論 0 12
  • 你孤獨嗎网梢?你問過自己嗎?我問過垫竞,內(nèi)心告訴我澎粟,你可能不懂得幸福。 晚上跑完步一直想著喝奶茶欢瞪,就任性的給自己的健康生活...
    禾必閱讀 203評論 14 3