《資料結構打卡》第10天 排序篇

2021-10-05 04:50:22 字數 3962 閱讀 4009

各種排序的說明:

各種排序比較次數:

插入 排序 最少n-1 最多n(n-1)/2

冒泡 排序 最少n-1 最多n(n-1)/2

選擇 排序 最少最多為n(n-1)/2

快速 排序 最少nlog2n - 最多n2

歸併 排序 nlog2n – (2n-1)logn

一、例如:關鍵字(45 80 48 40 22 78),請分別給出第4趟簡單選擇排序和直接插入排序的結果。

1.簡單選擇排序:

(1)從待排序的元素中選出最小的元素和第乙個值進行位置交換。

(2)然後選出值為第2小的元素和第2個值進行交換。

(3)再選出值為第3小的元素和第3個值進行交換。

(3)依此類推,直到交換完畢。

例1用簡單選擇排序,求出第4趟的結果

第一趟:22 80 48 40 45 78

第二趟:22 40 48 80 45 78

第三趟:22 40 45 80 48 78

第四趟:22 40 45 48 80 78

第五趟:22 40 45 48 78 80

例2.[簡單選擇排序另一種情況]

設有一組初始關鍵字序列為(24,35,12,27,18,26),則第3趟簡單選擇排序結束後的結果的是

第一趟:12,35,24,27,18,26

說明:12最小 12和第乙個數24交換位置

第二趟:12,18,24,27,35,26

說明:18最小 18和除去12的序列以外的第乙個數35交換位置

第三趟:12,18,24,27,35,26

說明:24最小 24和除去12和18以外的第乙個數交換位置,發現是自己本身 不用進行交換,輸出序列。

例3.設一組初始記錄關鍵字序列為(49,38,65,97,76,13,27,50),則第4趟直接選擇排序結束後的結果為

第一趟:1338 65 97 76 49 27 50

第二趟:132765 97 76 49 38 50

第三趟:13 273897 76 49 65 50

第四趟:13 27 384976 97 65 50

第五趟:13 27 38 495097 65 76

第六趟:13 27 38 49 50 659776

第七趟:13 27 38 49 50 65 7697

3、直接插入排序:

(1)先保留第乙個關鍵字

(2)用第2個值來跟第1個值進行比較,如果小於它的值,則插入到前面;大於它的值,則插入在它後面。

(3)用第3個值來跟第2個值及前面元素進行比較,如果小於它的值,則插入到前面;大於它的值,則插入在它後面。

(4)注意:插入排序是從第2個元素開始依次向前比較(第乙個不用比),到最後乙個元素。

所以最多經過_n-1__趟排序可以完成排序

(5)依此類推,直到比較插入完畢。

例1:設有一組初始關鍵字序列為(45 80 48 40 22 78)

·用直接插入排序,求出第4趟的結果

第一趟:[45]

第二趟:[45 80]

第三趟:[45 48 80]

第四趟:[40 45 48 80] 22 78

第五趟:[22 40 45 48 80]

第六趟:[22 40 45 48 78 80]

例2:設有一組初始關鍵字序列為(24,35,12,27,18,26),則第3趟直接插入排序結束後的結果的是

第一趟:[24]

第二趟:[24 35]

第三趟:[12 24 35 27 18 26]

第四趟:[12 24 27 35 18 26]

第五趟:[12 18 24 27 35 26]

第六趟:[12 18 24 26 27 35]

二、快速排序(交換排序)

1.已知序列(10,18,4,3,6,12,1,9,18_,8)請用快速排序寫出每一趟排序的結果。

快速排序:

這裡要注意的是,如果low或high沒有將元素進行移動的話,則low(high)繼續指向下乙個元素,而不是交替指標。

·已知關鍵字序列為,利用快速排序方法,以第乙個元素為基準得到的一趟

排序結果為:

2.已知序列(10,18,4,3,6,12,1,9,-18-,8)請用快速排序寫出每一趟排序的結果(10分)。

解題思路:

首先選擇序列中第乙個10為基準值。

第一次把比10小的值全部移動到左子區,比10大的值移到右子區

第二次是,後面寫。

第三是,後面再來寫。

快速排序步驟:

第一趟:(8,9,4,3,6,1),10,(12,18,18)

第二趟:(1,6,4,3),8,(9),10,12,(18,18)

第三趟:1,(3,4,6),8,9,10,12,18,(18)

第四趟:1,3,(4,6),8,9,10,12,18,18

第五趟:1,3, 4,6,8,9,10,12,18,18

三、堆排序。

四、折半排序(插入排序)

1.首先令low指標指向序列中第乙個元素,high指向序列中最後乙個元素。

2.然後指標mid = [(low+high)]/2 指向的位置, 若是為小數,則向下取整。

3.如果要查詢的值小於mid.key的值,high指標指向mid-1位置;

4.如果要查詢的值大於mid.key的值,low指標指向mid+1位置;

例1:設一組初始記錄關鍵字序列為(15,17,18,22,35,51,60),要求計算出成功查詢時的平均查詢長度。

答:對於含有n個資料元素的查詢表,查詢成功的平均查詢長度為:

asl=∑pici (i=1,2,3,…,n),可以簡單以數學上的期望來這麼理解。其中:pi

為查詢表中第i個資料元素的概率,ci為找到第i個資料元素時已經比較過的次數。

序列(15,17,18,22,35,51,60)

那麼對數字15研究下:使用二分法找到15要經過3次比較

同理根據對稱18,35,60肯定也是要比較3次,此時為3 * 4;

同理得到:查詢到17,51分別需要比較2次,此時2 * 2;

查詢22當然只要1次就行

asl=(1 * 1+2 * 2+3 * 4)/7=17/7=2.42(次)

例2:資料結構有乙個長度為11的有序表,按二分查詢法對該錶進行查詢,在表內個元素等概率情況下,查詢成功所需___次?

**解釋:**其實只需要畫一棵具有11個結點的完全二叉樹,然後用每層的結點個數 * 從根出發路徑上的結點數。

(1 * 1+2 * 2+3 * 4 + 4 * 4)/11 = 33/11 =3(次)

五、希爾排序(插入排序)

設一組初始記錄關鍵字序列為(50,40,95,20,15,70,60,45),則以增量d=4的一趟希爾排序結束後前4條記錄關鍵字為。

若以4為增量,在序列中,[50,15]是一組,[40,70]是一組,[95,60]是一組,[20,45]是一組

經過組內排序後變為:[15,50],[40,70],[60,95],[20,45],

於是,前4條記錄為15,40,60,20。

《資料結構打卡》第16天 佇列篇

距離上一次更新隔了也有15天之久了,在家裡的這段時間真的過得蠻快的,但是也是昨天跟今天一樣,今天跟明天一樣,迴圈往復著 佇列的定義 佇列是操作受限的線性表,佇列的插入在隊尾,佇列的刪除在隊頭,佇列是先進先出的線性表 1 什麼是佇列的上溢現象?一般有幾種解決方法,試簡述之?答 當佇列中還有剩餘空間,入...

《資料結構打卡》第8天 自定義演算法篇

0 編寫乙個演算法,要求將奇數最先輸出,偶數最後輸出 15分 使用棧來操作。演算法思想 1.假設陣列arr中的值為,分別用兩個棧來輸出 2.奇數棧用於儲存,偶數棧用於儲存 3.最後用元素e分別從兩個棧中取出元素奇數元素在前,偶數元素在後的乙個序列,輸出為 void fun elemtype arr,...

《資料結構打卡》第5天 二叉樹專題

資料結構打卡 第5天 在n個結點的二叉鍊錶中,共有 2n 個指標域,有 n 1 個空指標域,有 n 1 個非空指標域 總鏈域 空鏈域 非空鏈域 2n n 1 n 1在有n個葉子結點的二叉樹中,結點總數為 2n 1 滿二叉樹一定是完全二叉樹,滿二叉樹不一定是哈夫曼樹。深度為k的完全二叉樹的第k層上至少...