版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、、插入排序(Insertion Sort)1. 基本思想:每次將一個待排序的數(shù)據(jù)元素,插入到前面已經(jīng)排好序的數(shù)列中的適當位置,使數(shù)列依然有序;直到待排序數(shù)據(jù)元素全部插入完為止。2. 排序過程:【示例】:初始關鍵字49 38 65 97 76 13 27 49J=2(38) 38 49 65 97 76 13 27 49J=3(65) 38 49 65 97 76 13 27 49J=4(97) 38 49 65 97 76 13 27 49J=5(76) 38 49 65 76 97 13 27 49J=6(13) 13 38 49 65 76 97 27 49J=7(27) 13 27 38
2、 49 65 76 97 49J=8(49) 13 27 38 49 49 65 76 971: Procedure InsertSort(Var R : FileType);3 /對R1.N按遞增序進行插入排序,R0是監(jiān)視哨/Begin5 for I := 2 To N Do / 依次插入 R2,.,Rn/beginR0 := R; J := I - 1;SWhile R0 < RJ Do / 查找 R 的插入位置 /begin10RJ+1 := RJ; /將大于R的元素后移/.1.1J := J - 1lend13 RJ + 1 := R0 ; / 插入 R /.1 】 endi-
3、End; /InsertSort /二、選擇排序1. 基本思想:每一趟從待排序的數(shù)據(jù)元素中選出最小(或最大)的一個元素,順序放在已排好序的數(shù)列的最后,直到全部待排序的數(shù)據(jù)元素排完。2. 排序過程:【示例】:初始關鍵字 49 38 65 97 76 13 27 49第一趟排序后13 38 65 97 7649 27 49第二趟排序后13 2765 97 7649 38 49第三趟排序后13 2738 97 76 4965 49第四趟排序后13 2738 49 49 9765 76第五趟排序后13 273849 49 9797 76第六趟排序后13 273849 49 7676 97第七趟排序后1
4、3 273849 49 7676 97最后排序結果13 273849 49 7676 971617 Procedure SelectSort(Var R : FileType); / 對 R1.N進行直接選擇排序/Begin19 for I := 1 To N - 1 Do / 做 N - 1 趟選擇排序 /工begin二K := I;71 For J := I + 1 To N Do /在當前無序區(qū) RI.N中選最小的元素 RK/3begin>If RJ < RK Then K := J2-end;茵If K <> I Then / 交換 R 和 RK /:begin
5、 Temp := R; R := RK; RK := Temp; end;圣 end為 End; /SelectSort /復制代碼三、冒泡排序(BubbleSort)1. 基本思想:兩兩比較待排序數(shù)據(jù)元素的大小,發(fā)現(xiàn)兩個數(shù)據(jù)元素的次序相反時即進行交換,直到?jīng)]有反序的數(shù)據(jù)元素為止。2. 排序過程:設想被排序的數(shù)組 R 1.N垂直豎立,將每個數(shù)據(jù)元素看作有重量的氣泡,根據(jù)輕氣泡不能在重氣泡之下的原則,從下往上掃描數(shù)組 R,凡掃描到違反本原則的輕氣泡,就使其向上”漂浮”,如此反復進行,直至最后任何兩個氣泡都是輕者在上,重者在下為止。【示例】:49 13 13 13 13 13 13 1338 49
6、 27 27 27 27 27 2765 38 49 38 38 38 38 3897 65 38 49 49 49 49 4976 97 65 49 49 49 49 4913 76 97 65 65 65 65 6527 27 76 97 76 76 76 7649 49 49 76 97 97 97 973031 Procedure BubbleSort(Var R : FileType) /從下往上掃描的起泡排序 /? Begin33 For I := 1 To N-1 Do / 做 N-1 趟排序 /? i begin3=NoSwap := True; / 置未排序的標志/咬 For
7、 J := N - 1 DownTo 1 Do /從底部往上掃描/3begin38If RJ+1< RJ Then / 交換元素 /上,beginLTemp := RJ+1; RJ+1 := RJ; RJ := Temp;<1NoSwap := False乩end;end;44 If NoSwap Then Return/ 本趟排序中未發(fā)生交換,則終止算法/end-:6 End; /BubbleSort/復制代碼四、快速排序(Quick Sort )1. 基本思想:在當前無序區(qū)R1.H中任取一個數(shù)據(jù)元素作為比較的"基準”(不妨記為X),用此基準將當前無序區(qū)劃分為左右兩個較
8、小的無序區(qū):R1.I-1和RI+1.H,且左邊的無序子區(qū)中數(shù)據(jù)元素均小于等于基準元素,右邊的無序子區(qū)中數(shù)據(jù)元素均大于等于基準元素,而基準X則位于最終排序的位置上,即R1.I-1 X.Key 河+1.H(1 V奇),當R1.I-1和RI+1.H均非空時,分別對它們進行上述的劃分過程,直至所有無序子區(qū)中的數(shù)據(jù)元素均已排序為止。2. 排序過程: 【示例】:初始關鍵字 49 38 65 97 76 13 27 49:第一次交換后27 38 65 97 76 13 49 49:第二次交換后27 38 49 97 76 13 65 49:J向左掃描,位置不變,第三次交換后27 38 13 97 76 49
9、 65 49:I向右掃描,位置不變,第四次交換后27 38 13 49 76 97 65 49:J向左掃描27 38 13 49 76 97 65 49:(一次劃分過程)初始關鍵字49 38 65 97 76 13 27 49:一趟排序之后27 38 13 : 49 76 97 65 49 :二趟排序之后13: 27 38: 49 49 65 : 76 97 三趟排序之后 13 27 38 49 4965 : 76 97最后的排序結果 13 27 38 49 49 65 76 97 各趟排序之后的狀態(tài)47Procedure Parttion(Var R : FileType; L, H : I
10、nteger; Var I : Integer);戒對無序區(qū)R1,H做劃分,I給以出本次劃分后已被定位的基準元素的位置/' ',Begin51 I := 1; J := H; X := R ;/初始化,X 為基準 /Repeat5 While (RJ >= X) And (I < J) DoMl begin55J := J - 1 從右向左掃描,查找第1個小于X的元素/免If I < J Then / 已找到 RJ XII:'begin潟R:= RJ; /相當于交換 R和RJ/、.,I:= I + 1',end;:While (R <=
11、X) And (I < J) Do應I := I + 1 從左向右掃描,查找第1個大于X的元素/6 end;8 If I < J Then / 已找到 R > X /帝beginRJ := R; / 相當于交換 R 和 RJ/僉J := J - 1*end演 Until I = J;® R := X /基準X已被最終定位/i End; /Parttion /復制代碼7172 Procedure QuickSort(Var R :FileType; S,T: Integer); / 對 RS.T快速排序 /3 Begin由 If S < T Then /當RS.
12、T為空或只有一個元素是無需排序/心 begin范Partion(R, S, T, I); / 對 RS.T做劃分 /77QuickSort(R, S, I-1);/ 遞歸處理左區(qū)間 RS,I-1/弟QuickSort(R, I+1,T);/ 遞歸處理右區(qū)間 RI+1.T/end;End; /QuickSort/復制代碼五、堆排序(Heap Sort)1. 基本思想:堆排序是一樹形選擇排序,在排序過程中,將R1.N看成是一顆完全二叉樹的順序存儲結構,利用完全二叉樹中雙親結點和孩子結點之間的內(nèi)在關系來選擇最小的元素。2. 堆的定義:N個元素的序列K1,K2,K3,.,Kn.稱為堆,當且僅當該序列滿
13、足特性:Ki *2i Ki 水2i+1(1 < I< N/2)堆實質(zhì)上是滿足如下性質(zhì)的完全二叉樹:樹中任一非葉子結點的關鍵字均大于等于其孩子結點的關鍵字。例如序列10,15,56,25,30,70就是一個堆,它對應的完全二叉樹如上圖所示。這種堆中根結點(稱為堆頂)的關鍵字最小,我們把它稱為小根堆。反之,若完全二叉樹中 任一非葉子結點的關鍵字均大于等于其孩子的關鍵字,則稱之為大根堆。3.排序過程:堆排序正是利用小根堆(或大根堆)來選取當前無序區(qū)中關鍵字小(或最大)的記錄實現(xiàn)排序的。我們不妨利用大根堆來排序。每一趟排序的基本操作是:將當前無序區(qū)調(diào)整為一個大 根堆,選取關鍵字最大的堆頂記
14、錄,將它和無序區(qū)中的最后一個記錄交換。這樣,正好和直接選擇排序相反,有序區(qū)是在原記錄區(qū)的尾部形成并逐步向前擴大到整個記錄區(qū)?!臼纠浚簩﹃P鍵字序列42 , 13 , 91 , 23 , 24 , 16 , 05 , 88建堆S1沱 Procedure Sift(Var R :FileType; I, M : Integer);S3 在數(shù)組RI.M中調(diào)用R,使得以它為完全二叉樹構成堆。事先已知其左、右子樹(2I+1 <=M時)均是堆/綁 Begin85 X := R; J := 2*I; / 若 J <=M, RJ是 R 的左孩子淡 While J <= M Do /若當前被調(diào)
15、整結點R有左孩子 RJ/begin賣 If (J < M) And RJ.Key < RJ+1.Key Then盼 J := J + 1 /令J指向關鍵字較大的右孩子/必/J指向R的左、右孩子中關鍵字較大者/91 If X.Key < RJ.Key Then /孩子結點關鍵字較大/、.一:begin以R := RJ; /將RJ換到雙親位置上/8I := J ; J := 2*I /繼續(xù)以RJ為當前被調(diào)整結點往下層調(diào)整/、.;end;:Else:,Exit/調(diào)整完畢,退出循環(huán)/隊 endv R := X;/將最初被調(diào)整的結點放入正確位置/.1,End;/Sift/復制代碼101
16、 Procedure HeapSort(Var R : FileType); / 對 R1.N進行堆排序 /.1 f BeginKB For I := N Div Downto 1 Do / 建立初始堆 /匚 Sift(R, I , N)1 岱For I := N Downto 2 do / 進行 N-1 趟排序 /.1 :'; begin13T := R1; R1 := R; R := T;/ 將當前堆頂記錄和堆中最后一個記錄交換/1 催Sift(R, 1, I-1) / 將 R1.I-1重成堆 /end.1.1 End; /HeapSort/復制代碼六、幾種排序算法的比較和選擇1. 選取排序方法需要考慮的因素:(1) 待排序的元素數(shù)目n;(2) 元素本身信息量的大??;(3) 關鍵字的結構及其分布情況;(4) 語言工具的條件,輔助空間的大小等。2. 小結:(1) 若n較小(n <= 50),則可以采用直接插入排序或直接選擇排序。由于直接插入排序所需的記錄移動操作較直接選擇排序多,因而當記錄本身信息量較大時,用直接選擇排序較好。(2) 若文件的初始狀態(tài)已按關鍵字基本有序,則選用直接插入或冒泡排序為宜。(3) 若n
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度醫(yī)院物業(yè)委托管理與維護合同4篇
- 2025年度個人向公司借款用于投資合作合同范本2篇
- 2025年度影視作品制作及版權運營合同3篇
- 2024版院長聘用合同
- 2024裝修樣板間保密協(xié)議
- 2025年度智能家居產(chǎn)品承包加工合同4篇
- 2025年度智慧社區(qū)車位出售及智能停車解決方案合同4篇
- 2025年度咖啡館股權置換及品牌輸出合同3篇
- 2025年復雜斷塊油田項目可行性研究報告
- 2025年度體育場館運營管理承包服務合同范本4篇
- 人教版(2025新版)七年級下冊英語:寒假課內(nèi)預習重點知識默寫練習
- 藝術品捐贈協(xié)議
- 【公開課】同一直線上二力的合成+課件+2024-2025學年+人教版(2024)初中物理八年級下冊+
- 高職組全國職業(yè)院校技能大賽(嬰幼兒照護賽項)備賽試題庫(含答案)
- 2024年公安部直屬事業(yè)單位招聘筆試參考題庫附帶答案詳解
- NB-T 47013.15-2021 承壓設備無損檢測 第15部分:相控陣超聲檢測
- 司爐崗位應急處置卡(燃氣)參考
- 10KV供配電工程施工組織設計
- 終端攔截攻略
- 藥物外滲處理及預防【病房護士安全警示教育培訓課件】--ppt課件
- 紙箱檢驗標準新
評論
0/150
提交評論