最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

第11章 樹結(jié)構(gòu)實(shí)際應(yīng)用 11.1堆排序

2022-01-02 18:03 作者:取悅疾風(fēng)  | 我要投稿

內(nèi)容來(lái)自尚硅谷Java數(shù)據(jù)結(jié)構(gòu)與java算法(Java數(shù)據(jù)結(jié)構(gòu)與算法)_嗶哩嗶哩_bilibili

寫在前面:本文內(nèi)容大致和原視頻內(nèi)老師的筆記內(nèi)容相同,會(huì)偶爾插入自己的注釋和理解,盡量會(huì)完成作業(yè)

本次作業(yè)是自己能夠?qū)懗龆雅判虻拇a,我是自己看著自己寫的總結(jié)寫出來(lái)的

第11章 樹結(jié)構(gòu)實(shí)際應(yīng)用

11.1堆排序

11.1.1堆排序的基本介紹

1.????? 堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)而設(shè)計(jì)的一種排序算法,堆排序是一種選擇排序,它的最壞,最好,平均時(shí)間復(fù)雜度均為O(nlogn),它也是不穩(wěn)定排序。

2.????? 堆是具有以下性質(zhì)的完全二叉樹:每個(gè)結(jié)點(diǎn)的值都大于或等于其左右孩子結(jié)點(diǎn)的值,稱為大頂堆,注意︰沒(méi)有要求結(jié)點(diǎn)的左孩子的值和右孩子的值的大小關(guān)系。

3.????? 每個(gè)結(jié)點(diǎn)的值都小于或等于其左右孩子結(jié)點(diǎn)的值,稱為小頂堆

4.????? 大頂堆舉例說(shuō)明

5.????? 小頂堆舉例說(shuō)明

6.一般升序采用大頂堆,降序采用小頂堆

11.1.2堆排序基本思想

堆排序的基本思想是:

1.????? 將待排序序列構(gòu)造成一個(gè)大頂堆

2.????? 此時(shí),整個(gè)序列的最大值就是堆頂?shù)母?jié)點(diǎn)。

3.????? 將其與末尾元素進(jìn)行交換,此時(shí)末尾就為最大值。

4.????? 然后將剩余n-1個(gè)元素重新構(gòu)造成一個(gè)堆,這樣會(huì)得到n個(gè)元素的次小值。如此反復(fù)執(zhí)行,便能得到一個(gè)有序序列了。

可以看到在構(gòu)建大頂堆的過(guò)程中,元素的個(gè)數(shù)逐漸減少,最后就得到一個(gè)有序序列了

11.1.3堆排序步驟圖解說(shuō)明

要求:給你一個(gè)數(shù)組{4,6,8,5,9},要求使用堆排序法,將數(shù)組升序排序。

步驟一構(gòu)造初始堆。將給定無(wú)序序列構(gòu)造成一個(gè)大頂堆(一般升序采用大頂堆 ,降序采用小頂堆)。

1)???? 假設(shè)給定無(wú)序序列結(jié)構(gòu)如下

2)???? 此時(shí)我們從最后一個(gè)非葉子結(jié)點(diǎn)開始(葉結(jié)點(diǎn)自然不用調(diào)整,第一個(gè)非葉子結(jié)點(diǎn)arr.length/2-1=5/2-1=1,也就是下面的6結(jié)點(diǎn)),從左至右,從下至上進(jìn)行調(diào)整。

3)???? 找到第二個(gè)非葉節(jié)點(diǎn)4,由于[4,9,8]中9元素最大,4和9交換。

4)???? 這時(shí),交換導(dǎo)致了子根[4,5,6]結(jié)構(gòu)混亂,繼續(xù)調(diào)整,[4,5,6]中6最大,交換4和6

此時(shí),我們就將一個(gè)無(wú)序序列構(gòu)造成了一個(gè)大頂堆。

步驟二:將堆頂元素與末尾元素進(jìn)行交換,使末尾元素最大。然后繼續(xù)調(diào)整堆,再將堆頂元素與末尾元素交換,得到第二大元素。如此反復(fù)進(jìn)行交換、重建、交換。

1.???? 將堆頂元素9和末尾元素4進(jìn)行交換

2.???? 重新調(diào)整結(jié)構(gòu),使其繼續(xù)滿足堆定義

3.???? 再將堆頂元素8與未尾元素5進(jìn)行交換,得到第二大元素8

4.???? 后續(xù)過(guò)程,繼續(xù)進(jìn)行調(diào)整,交換,如此反復(fù)進(jìn)行,最終使得整個(gè)序列有序

再簡(jiǎn)單總結(jié)下堆排序的基本思路∶

1).將無(wú)序序列構(gòu)建成一個(gè)堆,根據(jù)升序降序需求選擇大頂堆或小頂堆;

2).將堆頁(yè)元素與末尾元素交換,將最大元素"沉"到數(shù)組末端;

3).重新調(diào)整結(jié)構(gòu),使其滿足堆定義,然后繼續(xù)交換堆頂元素與當(dāng)前末尾元素,反復(fù)執(zhí)行調(diào)整+交換步驟,直到整個(gè)序列有序。

11.1.4堆排序代碼實(shí)現(xiàn)

要求:給你一個(gè)數(shù)組{4,6,8,5,9},要求使用堆排序法,將數(shù)組升序排序。代碼實(shí)現(xiàn):看老師演示:

說(shuō)明:

1.???? 堆排序不是很好理解,老師通過(guò)Debug幫助大家理解堆排序

2.???? 堆排序的速度非???,在我的機(jī)器上8百萬(wàn)數(shù)據(jù)3秒左右。O(nlogn)

代碼實(shí)現(xiàn)


第11章 樹結(jié)構(gòu)實(shí)際應(yīng)用 11.1堆排序的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
广州市| 盘锦市| 平远县| 贵定县| 睢宁县| 麻阳| 九寨沟县| 虞城县| 灵川县| 班戈县| 晋江市| 凤冈县| 额济纳旗| 东城区| 眉山市| 连城县| 武夷山市| 安达市| 团风县| 平江县| 枞阳县| 湾仔区| 堆龙德庆县| 富锦市| 镇远县| 恩平市| 无极县| 泸定县| 江城| 漾濞| 福泉市| 邯郸县| 肥城市| 临夏县| 黑龙江省| 营口市| 合肥市| 贺州市| 江华| 天全县| 伊金霍洛旗|