【自考】數據結構第七章排序,期末不掛科指南,第11篇

概述

本小節最重要的一個點爲 排序算法的穩定性
概念:相同鍵值的兩個記錄在排序前後相對位置的變化情況。

n個記錄的序列爲{R1,R2,…,Rn} ,其對應的鍵值序列爲{k1,k2,…,kn},假設ki = kj,若在排序前的序列中Ri在Rj之前,即i<j,經過排序後,Ri仍在Rj之前,則稱所用的排序方法是穩定的;反之,則稱所用的排序方法是不穩定的。

穩定性是排序方法本身的特性,與數據無關。也就是說,一種排序方法如果是穩定的,則對所有的數據序列都是穩定的。

內部排序的方法很多,自考教材主要討論了四種,分別是插入排序、交換排序、選擇排序和歸併排序

插入排序

常見的插入排序方法有 直接插入排序折半插入排序表插入排序希爾排序

直接插入排序

通過案例說明,查看直接排序方法

應用直接插入排序方法,對序列{45,38,66,90,88,10,25,45}所示的一組鍵值進行排序,過程可參照下圖所示

參照動圖(動圖來源網絡)
在這裏插入圖片描述
直接插入排序說明

直接插入排序算法簡單,非常容易理解,容易實現,實現的複雜度爲O(n2),若待排序的記錄數量非常大的時候,一般不選用直接排序。從空間上來看,它只需要一個記錄的輔助空間,空間複雜度爲O(1)

自考真題

用插入排序算法對數據序列(47,33,61,82,72,11,25,57)進行排序,寫出整個插入排序的每一趟過程。

要點,就是選擇第一個元素之後,在從後面選擇小的,往前插

答:
第一趟:[47],33,61,82,72,11,25,57
第二趟:[33,47],61,82,72,11,25,57
第三趟:[33,47,61],82,72,11,25,57
第四趟:[33,47,61,82],72,11,25,57
第五趟:[33,47,61,72,82],11,25,57
第六趟:[11,33,47,61,72,82],25,57
第七趟:[11,25,33,47,61,72,82],57
第八趟:[11,25,33,47,57,61,72,82]

直接插入排序,時間複雜度爲O(n2),算法穩定

交換排序

交換排序的基本思想:比較兩個記錄鍵值的大小,如果這兩個記錄鍵值的大小出現逆序,交換這兩個記錄

冒泡排序

冒泡排序是一種交換排序的方法,其過程是首先將第一個記錄的鍵值和第二個記錄的鍵值進行比較,出現逆序,則將這兩個記錄交換,然後繼續比較低二個和第三個記錄的鍵值。依次類推,直到完成第n-1個記錄和第n個記錄的鍵值比較交換爲止。這個過程稱爲 起泡

動圖展示(圖片來源網絡)
在這裏插入圖片描述

自考真題

用冒泡排序法對數據序列(55,38,65,97,76,138,27,49)進行排序,寫出排序過程中的各趟結果。

要點,每兩個挨着比,每趟最大的沉底

答:
第一趟:38,55,65,76,97,27,49,138
第二趟:38,55,65,76,27,49,97,138
第三趟:38,55,65,27,49,76,97,138
第四趟:38,55,27,49,65,76,97,138
第五趟:38,27,49,55,65,76,97,138
第六趟:27,38,49,55,65,76,97,138

直接插入排序,時間複雜度爲O(n2),算法穩定

快速排序

快速排序是交換排序的一種,實質上是對冒泡排序的一種改進。它的基本思想是:在n個記錄中取某一個記錄的鍵值爲標準,通常取第一個記錄鍵值爲基準,通過一趟排序將待排的記錄分爲小於這個鍵值和大於或等於這個鍵值的兩個獨立部分,這時一部分的記錄鍵值均比另一部分記錄的鍵值小,然後,對這兩部分記錄繼續分別進行快速排序,以達到整個序列有序。

動圖展示(圖片來源網絡)

在這裏插入圖片描述

自考真題

自考真題

要點,用第一個數字,依次和後面的每個比較,然後拆分成2部分,一部分小於等於,一部分大於,依次類推即可

答:
第一次交換(注意不是第一趟):以72爲基數,走起 60,26,57,88,42,80,73,48,72 交換了72和60
第二次交換: 60,26,57,72 ,42,80,73,48,88交換了72和88
第三次交換: 60,26,57, 48,42,80,73,72,88
第四次交換: 60,26,57, 48,42,72,73,80,88 (得到第一趟結果)

所以 57對應的位置是2,72對應的位置是5,88對應的位置是8

快速排序,時間複雜度爲O(nlog2n),算法不穩定

選擇排序

選擇排序的基本思想:每一次在n-i+1(i=1,2,3,…,n-1)個記錄中選取鍵值最小的記錄作爲有序序列的第i個記錄。

直接選擇排序

在第i次的選擇操作中,通過n-i次鍵值間比較,從n-i+1個記錄中選出鍵值最小的記錄,並和第i個記錄交換

動圖展示(圖片來源網絡)
在這裏插入圖片描述

自考真題

應用直接選擇排序算法,對初始關鍵字序列爲48,35,61,98,82,18,29,48的記錄進行從小到大排序,寫出排序過程和結果。

每次選擇最小的和未排序的第一個元素交換

答:
第一趟:18,35,61,98,82,48,29,48
第二趟:18,29,61,98,82,48,35,48
第三趟:18,29,35,98,82,48,61,48
第四趟:18,29,35,48,82,98,61,48
第五趟:18,29,35,48,48,98,61,82
第六趟:18,29,35,48,48,61,98,82
第七趟:18,29,35,48,48,61,82,98

直接選擇排序,時間複雜度爲O(n2),算法不穩定

堆排序

堆排序是通過二叉樹來進行學習的

教材中有兩個重要概念

最小堆:任一結點的值都不大於它的兩個孩子的值
最大堆:任一結點的值都不小於它的兩個孩子的值

動圖展示(圖片來源網絡)
在這裏插入圖片描述

自考真題

判斷序列(28,75,33,68,25,56,47,99,86,36)是否爲堆?如果不是,則把它調整爲堆(最小堆)。

要點,畫出二叉樹,然後調整爲堆即可

在這裏插入圖片描述
不是堆,75所在結點大於子結點,開始調整

調整之後,把25調整到最上部

在這裏插入圖片描述
最小堆序列爲:25,26,33,68,36,56,47,99,86,75

直接選擇排序,時間複雜度爲O(nlog2n),算法不穩定

歸併排序

歸併的含義是將兩個或兩個以上的有序表合併成一個新的有序表。合併的方法是比較各子序列的第一個記錄的鍵值,最小的一個就是排序後序列的第一個記錄的鍵值。

二路歸併排序

看圖理解(圖片來源網絡)
在這裏插入圖片描述

自考真題

若採用二路歸併排序方法對關鍵字序列(25,9,78,6,65,15,58,18,45,20}進行升序排序,寫出其每趟排序結束後的關鍵字序列。

要點:二二合併排序

答:
初始化:[25],[9],[78],[6],[65],[15],[58],[18],[45],[20]
第一趟:[9,25],[6,78],[15,65],[18,58],[20,45]
第二趟:[6,9,25,78],[15,18,58,65],[20,45]
第三趟:[6,9,15,18,25,58,65,78],[20,45]
第四趟:[6,9,15,18,20,25,45,58,65,78]

直接選擇排序,時間複雜度爲O(nlog2n),算法穩定

結束語

到現在爲止,數據結構期末不掛科指南已經全部完成,作爲入門數據結構導論,自考的這門教材還不錯,但是作爲程序員來說,數據結構的大門剛剛爲你打開。

未來,夢想橡皮擦,會輸出一套純面向自考應試的視頻教程,如果有需要,歡迎繼續關注吧

有什麼疑問,可以在評論區或者私信給我,加油

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章