![北京理工大學(xué)數(shù)據(jù)結(jié)構(gòu)排序課件_第1頁(yè)](http://file4.renrendoc.com/view/480935da437663fa29f042cc1fe996d7/480935da437663fa29f042cc1fe996d71.gif)
![北京理工大學(xué)數(shù)據(jù)結(jié)構(gòu)排序課件_第2頁(yè)](http://file4.renrendoc.com/view/480935da437663fa29f042cc1fe996d7/480935da437663fa29f042cc1fe996d72.gif)
![北京理工大學(xué)數(shù)據(jù)結(jié)構(gòu)排序課件_第3頁(yè)](http://file4.renrendoc.com/view/480935da437663fa29f042cc1fe996d7/480935da437663fa29f042cc1fe996d73.gif)
![北京理工大學(xué)數(shù)據(jù)結(jié)構(gòu)排序課件_第4頁(yè)](http://file4.renrendoc.com/view/480935da437663fa29f042cc1fe996d7/480935da437663fa29f042cc1fe996d74.gif)
![北京理工大學(xué)數(shù)據(jù)結(jié)構(gòu)排序課件_第5頁(yè)](http://file4.renrendoc.com/view/480935da437663fa29f042cc1fe996d7/480935da437663fa29f042cc1fe996d75.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第十章 排序1 第十章 排 序 10.1 概述 10.2 插入排序 10.3 快速排序 10.4 選擇排序 2 10.1 概述 設(shè)R1 R2 R3 Rn 是n個(gè)記錄,k1,k2, k3 kn為它們的關(guān)鍵字,排序就是將記錄按關(guān)鍵字遞增(或遞減)的次序排列起來(lái)。 主要操作 比較關(guān)鍵字 移動(dòng)記錄3 1、排序的分類按記錄的存放位置分類有 內(nèi)部排序 外部排序按排序原則分類(內(nèi)部排序) 插入排序 交換排序 選擇排序 歸并排序 基數(shù)排序4 2、排序方法的穩(wěn)定性 在待排記錄序列中,任何兩個(gè)關(guān)鍵字相同的記錄,用某種排序方法排序后相對(duì)位置不變,則稱這種排序方法是穩(wěn)定的,否則稱為不穩(wěn)定的。待排序列: 49, 38,
2、 65, 97, 76, 13, 27, 49 排序后: 13, 27, 38, 49, 49, 65, 76, 97 穩(wěn)定排序后: 13, 27, 38, 49, 49, 65, 76, 97不穩(wěn)定5待排記錄的存儲(chǔ)順序關(guān)鍵字類型定義 typedef int KeyType; 記錄類型定義 typedef struct KeyType key; /關(guān)鍵字域 /其它域 RedType; 3、待排記錄的存儲(chǔ)6順序表類型定義 typedef struct RedType rMAXSIZE+1; int length; SqList 0 1 2 3 4 5 6 7 8 9 10 m-1 45 61 1
3、2 3 37 24 90 53 98 787 10.2 插入排序基本思想 依次將待排記錄插入到有序子表中,并使其插入后子表仍保持有序,直到全部記錄插入完畢;初始時(shí),有序子表中只有一個(gè)元素。 例 49 38 65 97 76 13 27 49 55 048 1、直接插入排序 例: 49 38 65 97 76 13 27 49 (49)38 65 97 76 13 27 49 (38 49)65 97 76 13 27 49 (38 49 65)97 76 13 27 49 (38 49 65 97)76 13 27 49 (38 49 65 76 97)13 27 49 (13 38 49 6
4、5 76 97)27 49 (13 27 38 49 65 76 97)49 (13 27 38 49 49 65 76 97)9void InsertSort(SqList &L) /對(duì)順序表L作直接插入排序(非遞減)。 for (i=2; i=L. length; +i) if (L.ri.key L.ri-1.key) /將L.ri插入有序子表 L.r0=L.ri; /將L.ri復(fù)制為哨兵 for(j=i-1; L.r0.keyL.rj.key; -j ) L.rj+1=L.rj; /記錄后移 L.rj+1=L.r0; /插入正確位置 0 1 2 3 4 5 6 7 8 m-1 49 3
5、8 65 76 97 13 27 4910 如果 R1, ., i-1 是一個(gè)按關(guān)鍵字有序的有序序列,則可以利用折半查找實(shí)現(xiàn)“在R1, , i-1中查找Ri的插入位置”,如此實(shí)現(xiàn)的插入排序?yàn)檎郯氩迦肱判颉?、折半插入排序1114 36 49 52 8058 61 23 97 75ilowhighmmlowlowmhigh14 36 49 52 58 61 80 23 97 75ilowhighmhighmhighmlow例如:再如:插入 位置插入 位置L.rL.r插入位置:high + 1,其中的關(guān)鍵字是有序子表中大于待插入記錄的最小的一個(gè)。12low = 1; high = i-1;whil
6、e (low=high) m = (low+high)/2; / 折半if (L.r0.key L.rm.key) high = m-1; / 插入點(diǎn)在低半?yún)^(qū)else low = m+1; / 插入點(diǎn)在高半?yún)^(qū)/在 L.r1.i-1中折半查找插入位置;13void BiInsertionSort ( SqList &L ) / BInsertSort /在 L.r1.i-1中折半查找插入位置;for ( i=2; i=high+1; -j ) L.rj+1 = L.rj; / 記錄后移L.rhigh+1 = L.r0; / 插入折半插入排序僅減少了比較次數(shù),但是記錄的移動(dòng)次數(shù)沒變!1410.3
7、交換排序基本思想: 將待排記錄中兩兩記錄的關(guān)鍵字進(jìn)行比較,若逆序則交換位置。 例:49 38 65 97 76 13 27 49 起泡排序 49 38 65 97 76 13 27 49 38 49 65 76 13 27 49 9715 快速排序選定一記錄R,將所有其他記錄關(guān)鍵字k與該記錄關(guān)鍵字k比較, 若 kk 則將記錄換至R之后; 繼續(xù)對(duì)R前后兩部分記錄分別進(jìn)行快速排序,直至排序范圍為1; 例 49 38 65 97 76 13 27 49 55 0416 49 38 65 97 76 13 27 49 一趟快速排序jjii 27 38 65 97 76 13 49 49ijj 27 3
8、8 49 97 76 13 65 49jiiij 27 38 13 97 76 49 65 49jji 27 38 13 49 76 97 65 49(2749)(9749)(1349)(i=j)i即low; j即high17int Partition(SqList &L, int low, int high) /一趟快速排序pivotkey=L.rlow.key; while(lowhigh) /從表的兩端交替地向中間掃描 while(low=pivotkey) -high; L.rlowL.rhigh; while (lowhigh & L.rlow. Key=pivotkey) +low
9、; L.rhigh L.rlow; return low; /返回樞軸位置/Partition18 49 38 65 97 76 13 27 49 49一趟快速排序jjii 27 38 65 97 76 13 27 49ijj 27 38 65 97 76 13 65 49jiiij 27 38 13 97 76 13 65 49jji 27 38 13 97 76 97 65 49(2749)(9749)(1349)(i=j)i即low; j即highji 27 38 13 49 76 97 65 4919int Partition(SqList &L, int low, int high)
10、 /一趟快速排序L.r0=L.rlow; /用子表的第一個(gè)記錄作樞軸記錄pivotkey=L.rlow.key; while(lowhigh) /從表的兩端交替地向中間掃描 while(low=pivotkey) -high; L.rlow=L.rhigh; while (lowhigh & L.rlow. Key=pivotkey) +low; L.rhigh=L.rlow; L.rlow=L.r0; /將樞軸記錄放到樞紐位置 return low; /返回樞軸位置/Partition20 27 38 13 49 76 97 65 49快速排序 13 27 38 49 49 65 76 97
11、13 27 38 49 49 65 76 971趟快速排序后:分別快速排序后: 49 38 65 97 76 13 27 49 待排序:完成快速排序后:21void Qsort(SqList &L, int low, int high) /對(duì)順序表L中的子序列L.rlow. high作快速排序 if (lowhigh) pivotloc=Partition(L, low, high); QSort(L, low, pivotloc-1); Qsort(L, pivotloc+1, high); void QuickSort(SqList &L ) /對(duì)順序表L快速排序 QSort(L, 1,
12、L.length); 就平均時(shí)間而言,快速排序被認(rèn)為是目前最好的一種內(nèi)部排序。22 10.4 選擇排序基本思想在待排記錄中依次選擇關(guān)鍵字最小的記錄,逐漸縮小范圍直至全部記錄選擇完畢。 例 49 38 65 97 76 13 27 49 23 一 簡(jiǎn)單選擇排序 49 38 65 97 76 13 27 49 1338 65 97 76 49 27 49 13 2765 97 76 49 38 49 13 27 3865 97 76 49 49 13 27 38 4965 97 76 49 13 27 38 49 4965 97 76 13 27 38 49 49 6597 76 13 27 38
13、 49 49 65 76 9724void SelectSort(SqList &K) /簡(jiǎn)單選擇排序 for (i=1; iL.length; +i) /在L.ri.L.length 中選擇key最小的記錄 k=i; for( j=i+1;j= L.length ; j+) if ( L.rj.key L.rk.key) k=j; if(k!=i)L.riL.rj; 49 38 65 97 76 13 27 49 13 38 65 97 76 49 27 49 kjjjjj25 二 堆排序一顆完全二叉樹,如果滿足下面的條件,則稱其為堆:根結(jié)點(diǎn)關(guān)鍵字 左、右孩子結(jié)點(diǎn)的關(guān)鍵字;左、右子樹也是堆。
14、 816 9 1 6 2 1110 5 416 9 810 6 2 11 1 5 4大根堆不是堆26小根堆 1 6 811 916 2 10 4 5 1 9 810 616 2 11 5 4不是堆27堆的另一定義 對(duì)于一個(gè)關(guān)鍵碼序列K1,K2,Kn,如果滿足KiK2i而且KiK2i+1, (i=1, 2, , n/2),則稱其為堆(大根堆)。 816 9 1 6 2 1110 5 428 篩選操作(FilterDown): 1 9 8 10 6 2 16 11 5 4為了形成堆進(jìn)行的自堆頂至葉子結(jié)點(diǎn)的調(diào)整過(guò)程。29 篩選操作(FilterDown)16 9 8 10 6 2 1 11 5 4為
15、了形成堆進(jìn)行的自堆頂至葉子結(jié)點(diǎn)的調(diào)整過(guò)程。30 篩選操作(FilterDown)16 9 8 10 6 2 11 1 5 4為了形成堆進(jìn)行的自堆頂至葉子結(jié)點(diǎn)的調(diào)整過(guò)程。31 篩選操作(FilterDown)16 9 8 1 6 2 1110 5 4為了形成堆進(jìn)行的自堆頂至葉子結(jié)點(diǎn)的調(diào)整過(guò)程。32 建堆從堆的最后一個(gè)分支結(jié)點(diǎn)(第n/2個(gè)元素)開始到根結(jié)點(diǎn) ,依次進(jìn)行篩選,最終將之調(diào)整為堆。 1 9 8 10 616 2 11 4 533 建堆從堆的最后一個(gè)分支結(jié)點(diǎn)(第n/2個(gè)元素)開始到根結(jié)點(diǎn) ,依次進(jìn)行篩選,最終將之調(diào)整為堆。 1 9 8 10 616 2 11 5 434 建堆從堆的最后一個(gè)
16、分支結(jié)點(diǎn)(第n/2個(gè)元素)開始到根結(jié)點(diǎn) ,依次進(jìn)行篩選,最終將之調(diào)整為堆。 1 9 8 10 6 11 2 16 5 435 建堆從堆的最后一個(gè)分支結(jié)點(diǎn)(第n/2個(gè)元素)開始到根結(jié)點(diǎn) ,依次進(jìn)行篩選,最終將之調(diào)整為堆。 1 9 8 10 6 11 2 16 5 436 建堆從堆的最后一個(gè)分支結(jié)點(diǎn)(第n/2個(gè)元素)開始到根結(jié)點(diǎn) ,依次進(jìn)行篩選,最終將之調(diào)整為堆。 1 9 8 10 6 1116 2 5 437 建堆從堆的最后一個(gè)分支結(jié)點(diǎn)(第n/2個(gè)元素)開始到根結(jié)點(diǎn) ,依次進(jìn)行篩選,最終將之調(diào)整為堆。 1 9 8 10 6 216 11 5 438 建堆從堆的最后一個(gè)分支結(jié)點(diǎn)(第n/2個(gè)元素)開
17、始到根結(jié)點(diǎn) ,依次進(jìn)行篩選,最終將之調(diào)整為堆。16 9 8 10 6 2 1 11 5 439 建堆從堆的最后一個(gè)分支結(jié)點(diǎn)(第n/2個(gè)元素)開始到根結(jié)點(diǎn) ,依次進(jìn)行篩選,最終將之調(diào)整為堆。16 9 8 10 6 2 11 1 5 440 建堆從堆的最后一個(gè)分支結(jié)點(diǎn)(第n/2個(gè)元素)開始到根結(jié)點(diǎn) ,依次進(jìn)行篩選,最終將之調(diào)整為堆。16 9 8 1 6 2 11 10 5 441 堆排序建堆循環(huán),直到堆為空: 將堆頂元素與堆最后的元素互換; 輸出堆最后的元素; 將其余的元素重新篩選成堆;4216 9 8 1 6 2 11 10 5 4 1 9 8 10 616 2 11 4 5建堆4316 9 8 1 6 2 11 10 5 4 4 9 8 1 6 2 11 10 516循環(huán),直到堆為空: 將堆頂元素與堆最后的元素交換;將其余
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 瀏覽器文檔瘦身專項(xiàng)測(cè)試卷
- 熱電廠題庫(kù)1練習(xí)試題附答案
- 2025年中國(guó)銅散熱器市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國(guó)筆套市場(chǎng)調(diào)查研究報(bào)告
- 2025至2030年中國(guó)雙聲重低音模塊數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)三孔可調(diào)合頁(yè)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年中國(guó)速凍雙孢菇市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國(guó)磷酸鉀三水市場(chǎng)調(diào)查研究報(bào)告
- 2025年春季《人教版小學(xué)六年級(jí)數(shù)學(xué)下冊(cè)教學(xué)工作計(jì)劃表》
- 2025-2030年成長(zhǎng)能量棒行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 社區(qū)中心及衛(wèi)生院65歲及以上老年人健康體檢分析報(bào)告模板
- 化工過(guò)程安全管理導(dǎo)則AQT 3034-2022知識(shí)培訓(xùn)
- 第02講 導(dǎo)數(shù)與函數(shù)的單調(diào)性(教師版)-2025版高中數(shù)學(xué)一輪復(fù)習(xí)考點(diǎn)幫
- 2024屆新高考語(yǔ)文高中古詩(shī)文必背72篇 【原文+注音+翻譯】
- 2024電力建設(shè)工程質(zhì)量問題通病防止手冊(cè)
- 中華人民共和國(guó)學(xué)前教育法
- 2024年貴州公務(wù)員考試申論試題(B卷)
- 三年級(jí)(下冊(cè))西師版數(shù)學(xué)全冊(cè)重點(diǎn)知識(shí)點(diǎn)
- 期末練習(xí)卷(試題)-2024-2025學(xué)年四年級(jí)上冊(cè)數(shù)學(xué)滬教版
- 2025年公務(wù)員考試申論試題與參考答案
- 抑郁癥課件教學(xué)課件
評(píng)論
0/150
提交評(píng)論