版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第十章 內(nèi)部排序,10.1 概述 10.2 插入排序 10.2.1 直接插入排序 10.2.3 shell排序 10.3 交換排序(快速排序) 10.4 選擇排序 10.4.1 簡單選擇排序 10.4.3 堆排序 10.5 歸并排序 10.6 基數(shù)排序 10.7 各種排序方法的比較討論,10.1 內(nèi)部排序概述,排序(Sorting): 將數(shù)據(jù)元素(或記錄)的一個任意序列,重新排列成一個按關(guān)鍵字有序的序列。 排序方法的穩(wěn)定性: 對關(guān)鍵字相同的數(shù)據(jù)元素,排序前后它們的領(lǐng)先關(guān)系保持不變,則稱該排序方法是穩(wěn)定的。反之,稱該排序方法是不穩(wěn)定的。 內(nèi)部排序 待排序記錄存放在計算機(jī)的內(nèi)存中進(jìn)行排序。 外部排
2、序 待排序記錄的數(shù)量很大,以致內(nèi)存一次不能容納全部記錄,在排序過程中尚需對外存進(jìn)行訪問的排序。,排序的分類,按排序過程依據(jù)的不同原則進(jìn)行分類: 插入排序、 交換排序、 選擇排序、 歸并排序和 基數(shù)排序 按工作量分類,可以分為三類: (1)簡單的排序方法,其時間復(fù)雜度為O(n2); (2)先進(jìn)的排序方法,其時間復(fù)雜度為O(nlog2n); (3)基數(shù)排序,其時間復(fù)雜度為O(dn);,排序的基本操作和記錄的存儲方式,排序過程中需要的兩種基本操作: (1)比較關(guān)鍵字的大小; (2)將記錄從一個位置移至另一個位置。 待排序記錄序列可有下列三種存儲方式: (1)記錄存放在一組連續(xù)的存儲單元中;類似于線性
3、表的順序存儲結(jié)構(gòu),記錄次序由存儲位置決定,實(shí)現(xiàn)排序需移動記錄。 (2)記錄存放在靜態(tài)鏈表中;記錄次序由指針指示,實(shí)現(xiàn)排序不需移動記錄,僅需修改指針。- 鏈排序 (3)記錄本身存放在一組連續(xù)的存儲單元中,同時另設(shè)指示各個記錄存儲位置的地址向量,排序過程中不移動記錄本身,而移動地址向量中相應(yīng)記錄的地址。排序結(jié)束后再根據(jù)地址調(diào)整記錄的存儲位置。- 地址排序,待排序記錄的數(shù)據(jù)類型,#define MAXSIZE 20 typedef int KeyType; typedef struct KeyType key; InfoType otherinfo; RcdType; typedef struct
4、RedType rMAXSIZE+1; int length; SqList;,10.2 插入排序10.2.1 直接插入排序,例:序列為49,38,65,97,76,13,27,49 (49),38,65,97,76,13,27,49 (38) (38,49),65,97,76,13,27,49 (65) (38,49,65),97,76,13,27,49 (97) (38,49,65,97),76,13,27,49 (76) (38,49,65,76,97),13,27,49 (13) (13,38,49,65,76,97),27,49 (27) (13,27,38,49,65,76,97)
5、,49 (49) (13,27,38,49,49,65,76,97),直接插入排序算法,void InsertSort(SqList / InsertSort,時間:最壞情形判斷與移動各接近 n(n+1)/2; 最好情形判斷n次,無移動;故時間復(fù)雜度:O(n2) 空間:一個輔助空間,10.2.2 Shell排序算法,基本思想: 先將整個待排序記錄序列分割成若干子序列分別進(jìn)行直接插入排序,待整個序列“基本有序”時,再對全體記錄進(jìn)行一次直接插入排序。 算法復(fù)雜度:O(n3/2),Shell排序舉例(非穩(wěn)定的),10.3 交換排序 1. 冒泡排序(其時間復(fù)雜度O(n2)),初 始 關(guān) 鍵 字,第 一
6、 趟 排 序 后,第 二 趟 排 序 后,第 三 趟 排 序 后,第 四 趟 排 序 后,第 五 趟 排 序 后,第 六 趟 排 序 后,2. 快速排序- 對冒泡排序的一種改進(jìn),基本思想: 通過一趟排序?qū)⒋判蛴涗浄指畛瑟?dú)立的兩部分,其中一部分的關(guān)鍵字均比另一部分的關(guān)鍵字小,則可分別對這兩部分記錄繼續(xù)分別進(jìn)行排序,以達(dá)到整個序列有序。,快速排序舉例,初始關(guān)鍵字:49,38,65,97,76,13,27,49,一趟完成后:27,38,13,49,76,97,65,49,快速排序分析,快速排序的平均時間為T(n) = knlog(n) k為某個常數(shù)因子 經(jīng)驗(yàn)表明,在同數(shù)量級的排序方法中,快速排序的
7、常數(shù)因子k最小. 就平均時間而言,快速排序是最好的. 若初始序列按關(guān)鍵字基本有序,快速排序蛻化為起泡排序,其時間復(fù)雜度為O(n2)。 改進(jìn)的方法,用“三者取中”的法則選取樞軸記錄(pivotkey).,快速排序舉例,初始關(guān)鍵字:49,38,65,97,76,13,27,49,一趟完成后:27,38,13,49,76,97,65,49,快速排序算法(一),int Partition(SqList ,快速排序算法(二),void Qsort(SqList / QuickSort,10.4 選擇排序 10.4.1. 簡單選擇排序(其時間復(fù)雜度O(n2)),基本思想: 每一趟在序列的后n-i+1(i=
8、1,2,.,n-1)個記錄中選取關(guān)鍵字最小的記錄作為第i個記錄。,void SelectSort(SqList / 與第i個記錄交換 / SelectSort,初始關(guān)鍵字:49,38,65,97,76,13,27,49 第一次交換:13,38,65,97,76,49,27,49,10.4.3 堆排序,堆的定義: n個元素的序列k1,k2,.,kn當(dāng)且僅當(dāng)滿足下列條件時,稱之為堆。,堆舉例: 96,83,27,38,11,09) 12,36,24,85,47,30,53,91,完全二叉樹,且所有非葉 結(jié)點(diǎn)的值均不大于(不小 于)其左、右孩子結(jié)點(diǎn)的值,實(shí)現(xiàn)堆要解決的問題,(1)如何從一個無序序列建
9、成一個堆? (2)如何在輸出堆頂元素之后,調(diào)整剩余元素成為一個新的堆?,無序序列建成一個堆(從第n/2到1個元素) 49,38,65,97,76,13,27,49,10.5 歸并排序(Merging Sort),將兩個或兩個以上的有序表組合成一個新的有序表 2-路歸并舉例:,初始關(guān)鍵字: 49 38 65 97 76 13 27,一趟歸并后: 38 49 65 97 13 76 27,二趟歸并后: 38 49 65 97 13 27 76,三趟歸并后: 13 27 38 49 65 76 97,2-路歸并算法,void Merge(RcdType SR, RcdType /復(fù)制剩余的SRj.n
10、 / Merge,歸并算法的特點(diǎn),需要輔助空間: O(n) 整個歸并需要 log2n 趟 時間復(fù)雜度: O(n log2n) 它是穩(wěn)定的排序方法 思想可以推廣到 “多-路歸并“,10.6 基數(shù)排序(Radix Sorting),不需要進(jìn)行關(guān)鍵字之間的比較 借助多關(guān)鍵字排序的思想對單關(guān)鍵字排序 10.6.1 多關(guān)鍵字排序 2345678910JQKA 2345678910JQKA 2345678910JQKA 2345678910JQKA 花色 ()優(yōu)先于面值(23.A) 最高位優(yōu)先(MSD): 分成子序列分別排序 最高位優(yōu)先(LSD): 通過若干次“分配”和“收集“,10.6.2 基數(shù)排序,借
11、助“分配”和“收集“兩種操作對單關(guān)鍵字進(jìn)行排序。例如: 278-109-063-930-589-184-505-269-008-083,278,109,063,930,184,505,589,269,008,083,930-063-083-184-505-278-008-109-589-269,930-063-083-184-505-278-008-109-589-269,278,109,063,930,184,505,589,269,008,184,505-008-109-930-063-269-278-083-184-589,505,008,109,930,063,269,278,083,
12、083,589,008-063-083-109-184-269-278-505-589-930,基數(shù)排序分析(d個關(guān)鍵字的取值范圍rd),“收集”重復(fù)的次數(shù)為d; 一輪“分配”的次數(shù)為n+rd; 時間復(fù)雜度為O(d(n+rd); 鏈?zhǔn)交鶖?shù)排序所需輔助存儲量為O(n)。,10.7 各種排序方法的比較討論,排序方法 簡單排序 Shell排序 快速排序 堆排序 歸并排序 基數(shù)排序,平均時間 O(n2) O(n3/2) O(nlogn) O(nlogn) O(nlogn) O(d(n+rd),最壞情況 O(n2) O(n2) O(n2) O(nlogn) O(nlogn) O(d(n+rd),輔助存儲 O(1) O(1) O(logn) O(1) O(n) O(rd),插入, 交換, 選擇, 歸并, 基數(shù)排序,幾個結(jié)論,(1)平均時間性能快速排序最佳,但最壞情況下的時間性能不如堆排序和歸并排序. (2)簡單排序以“直接插入排序”最簡單,當(dāng)序列“基本有序”或n較
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 燒燙傷的急診處理總結(jié)2026
- 護(hù)理專業(yè)人才培訓(xùn)策略分析
- 財稅銷售教學(xué)課件
- 財稅業(yè)務(wù)講解課件教學(xué)
- 護(hù)理人員的護(hù)理質(zhì)量監(jiān)控與管理
- 2026年河北資源環(huán)境職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試模擬試題有答案解析
- 生物醫(yī)學(xué)工程與設(shè)備操作培訓(xùn)
- 2026年寶雞職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試備考試題帶答案解析
- 初中數(shù)學(xué)精簡題庫及答案
- 人工智能在眼科疾病治療中的應(yīng)用
- 機(jī)器人手術(shù)術(shù)后引流管管理的最佳實(shí)踐方案
- 2025年產(chǎn)品質(zhì)量復(fù)盤與2026年品控升級指南
- 2025有色金屬行業(yè)市場發(fā)展深度分析及未來趨勢與投資戰(zhàn)略研究報告
- 2026年廣東省第一次普通高中學(xué)業(yè)水平合格性考試化學(xué)仿真模擬卷01(全解全析)
- 燈展活動安全協(xié)議書
- 2026中國醫(yī)藥招標(biāo)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 藥品追溯管理培訓(xùn)試題附答案
- 《國家十五五規(guī)劃綱要》全文
- 固定管板式柴油冷卻器的設(shè)計與計算
- 線束基礎(chǔ)知識培訓(xùn)心得
- 慢性阻塞性肺疾病患者常規(guī)隨訪服務(wù)記錄表
評論
0/150
提交評論