資料結構實踐專案 排序

2021-09-23 18:00:16 字數 1639 閱讀 4559

本文是[資料結構基礎系列(9):排序]課程的實踐專案。

本文針對:

1. 排序問題及導學

2. 插入排序之直接插入排序

3. 插入排序之希爾排序

4. 交換排序之氣泡排序

5. 交換排序之快速排序

6. 選擇排序之直接選擇排序

7. 選擇排序之堆排序

8. 歸併排序

9. 簡單的計數排序

10. 基數排序

11. 各種排序的比較

1.給定序列,採用下面的演算法,分別描述排序的過程:

(1)直接插入排序; (2)希爾排序; (3)氣泡排序; (4)快速排序; (5)直接選擇排序; (6)堆排序; (7)歸併排序; (8)簡單的計數排序; (9)基數排序

2、關於堆

(1)下列關鍵碼序列中__是堆。

a. (54,41,20,16,30,6,36,24,12)

b. (54,41,20,36,12,6,16,24,30)

c. (54,20,41,36,12,6,16,30,24)

d. (54,30,20,24,12,16,6,41,36)

(2)已知關鍵字序列5,8,12,19,28,20,15,22是小根堆,插入關鍵字3,調整好後得到的小根堆是什麼?

3、如果將所有中國人按照生日來排序,則使用(   )演算法最快?

4、乙個序列中有10000個元素,若只想得到其中前10個最小元素,則最好採用(   )排序方法?

5、在有n個關鍵字互不相同的記錄中,找到關鍵字由小到大第k大的記錄,用(   )排序的思想設計演算法更好?

(2)(3)

(4)(5)

(6)(7)

(8)

【專案2 - 大資料集上排序演算法效能的體驗】

設計乙個函式,產生乙個至少5萬條記錄的資料集合。在同一資料集上,用直接插入排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序等演算法進行排序,記錄所需要的時間,經過對比,得到對複雜度不同的各種演算法在執行時間方面的感性認識。

提示1:這一專案需要整合多種排序演算法,可以考慮先建設排序演算法庫,作為我們這門課演算法庫的收官之作;

提示2:本專案旨在獲得對於複雜度不同演算法的感性認識,由於資料分布特點、計算機執行狀態等不同,其結果並不能完全代替對演算法複雜度的理論分析;

提示3:由於c語言標準提供的時間函式只精確到秒,幾種o(nlog2n)級別的演算法,在5萬條記錄的壓力下,並不能明顯地看出優劣,可以忽略直接插入排序、氣泡排序、直接選擇排序這三種相對低效率的演算法(以節約時間。若能夠忍受他們長時間地執行,請自便),成10倍地加大資料量,然後進行觀察。

[參考解答]

【專案3 - 歸併排序演算法的改進】

採用歸併排序、快速排序等高效演算法進行排序,當資料元素較少時(如n≤64),經常直接使用直接插入排序演算法等高複雜度的演算法。這樣做,會帶來一定的好處,例如歸併排序減少分配、**臨時儲存區域的頻次,快速排序減少遞迴層次等。

試按上面的思路,重新實現歸併排序演算法。

[參考解答]

【專案4 - 英文單詞的基數排序】

設計乙個基數排序的演算法,將一組英文單詞,按字典順序排列。假設單詞均由小寫字母或空格構成,最長的單詞有maxlen個字母。

[參考解答]

資料結構實踐專案 排序

本文是 資料結構基礎系列 排序 課程的實踐專案。本文針對 1.排序問題及導學 2.插入排序之直接插入排序 3.插入排序之希爾排序 4.交換排序之氣泡排序 5.交換排序之快速排序 6.選擇排序之直接選擇排序 7.選擇排序之堆排序 8.歸併排序 9.簡單的計數排序 10.基數排序 11.各種排序的比較 ...

資料結構實踐專案 棧

本組專案針對 資料結構基礎系列 3 棧和佇列 中的1 6課 1 棧和佇列 導學 2 棧的定義 3 棧的順序儲存結構及其基本運算實現 4 棧的鏈式儲存結構及其基本運算的實現 5 棧的應用1 表示式求值 6 棧的應用2 迷宮問題 專案1 建立順序棧演算法庫 定義順序棧儲存結構,實現其基本運算,並完成測試...

資料結構實踐專案 鍊錶

本組專案針對 資料結構基礎系列 2 線性表 課程第8 15節 8.線性表的鏈式儲存 9.建立單鏈表 10.單鏈表基本操作的實現 11.單鏈表應用舉例 12.雙鏈表 13.迴圈鍊錶 14.線性表的應用 15.有序表 專案1 建立單鏈表 定義單鏈表儲存結構,用頭插法和尾插法建立單鏈表,並顯示建立好以後的...