各種排序的說明:
各種排序比較次數:
插入 排序 最少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序列(15,17,18,22,35,51,60)為查詢表中第i個資料元素的概率,ci為找到第i個資料元素時已經比較過的次數。
那麼對數字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層上至少...