【最详细】数据结构(C语言版 第2版)第八章课后习题答案 严蔚敏 等 编著
所有章節(jié)答案合集——>傳送門
1.選擇題
 ( 1)從未排序序列中依次取出元素與已排序序列中的元素進行比較, 將其放入已排序序
 列的正確位置上的方法,這種排序方法稱為() 。
 A.歸并排序
 B.冒泡排序
 C.插入排序
 D.選擇排序
 答案: C
( 2)從未排序序列中挑選元素,并將其依次放入已排序序列(初始時為空)的一端的方
 法,稱為() 。
 A.歸并排序
 B.冒泡排序
 C.插入排序
 D.選擇排序
 答案: D
( 3)對 n 個不同的關(guān)鍵字由小到大進行冒泡排序,在下列()情況下比較的次數(shù)最多。
 A.從小到大排列好的
 B .從大到小排列好的
 C.元素?zé)o序
 D .元素基本有序
 答案: B
 解釋:對關(guān)鍵字進行冒泡排序,關(guān)鍵字逆序時比較次數(shù)最多。
( 4)對 n 個不同的排序碼進行冒泡排序,在元素?zé)o序的情況下比較的次數(shù)最多為() 。
 A. n+1
 B. n
 C. n-1
 D. n(n-1)/2
 答案: D
 解釋:比較次數(shù)最多時,第一次比較 n-1 次,第二次比較 n-2 次, 最后一次比較 1
 次,即 (n-1)+(n-2)+ , +1= n(n-1)/2 。
( 5)快速排序在下列()情況下最易發(fā)揮其長處。
 A.被排序的數(shù)據(jù)中含有多個相同排序碼
 B.被排序的數(shù)據(jù)已基本有序
 C.被排序的數(shù)據(jù)完全無序
 D.被排序的數(shù)據(jù)中的最大值和最小值相差懸殊
 答案: C
 解釋: B 選項是快速排序的最壞情況。
( 6)對 n 個關(guān)鍵字作快速排序,在最壞情況下,算法的時間復(fù)雜度是() 。
 A. O(n)
 B . O(n 2)
 C. O(nlog 2n)
 D . O(n 3)
 答案: B
 解釋:快速排序的平均時間復(fù)雜度為 O(nlog 2n) ,但在最壞情況下,即關(guān)鍵字基本排好
 序的情況下,時間復(fù)雜度為 O(n 2)。
( 7)若一組記錄的排序碼為( 46, 79 ,56 ,38 ,40 ,84),則利用快速排序的方法,以第一個記錄為基準得到的一次劃分結(jié)果為() 。
 A. 38 , 40, 46, 56 , 79, 84
 B .40, 38, 46 , 79, 56 , 84
 C. 40 , 38, 46 , 56, 79, 84
 D . 40, 38, 46 , 84, 56 , 79
 答案: C
( 8)下列關(guān)鍵字序列中, ()是堆。
 A. 16 , 72, 31, 23 , 94, 53
 B. 94, 23 , 31 , 72 , 16, 53
 C. 16 , 53, 23 , 94, 31, 72
 D . 16 , 23, 53 , 31, 94, 72
 答案: D
 解釋: D 選項為小根堆
( 9)堆是一種()排序。
 A.插入
 B.選擇
 C.交換
 D.歸并
 答案: B
( 10 )堆的形狀是一棵() 。
 A.二叉排序樹
 B.滿二叉樹
 C.完全二叉樹
 D .平衡二叉樹
 答案: C
( 11)若一組記錄的排序碼為( 46, 79,56 , 38, 40,84 ),則利用堆排序的方法建立的
 初始堆為() 。
 A. 79 , 46, 56, 38 , 40, 84
 B . 84, 79, 56 , 38, 40 , 46
 C. 84 , 79, 56 , 46, 40, 38
 D . 84, 56, 79 , 40, 46 , 38
 答案: B
( 12 )下述幾種排序方法中,要求內(nèi)存最大的是() 。
 A.希爾排序
 B.快速排序
 C.歸并排序
 D.堆排序
 答案: C
 解釋:堆排序、希爾排序的空間復(fù)雜度為 O(1) ,快速排序的空間復(fù)雜度為 O(log 2n),
 歸并排序的空間復(fù)雜度為 O(n) 。
( 13 )下述幾種排序方法中, ()是穩(wěn)定的排序方法。
 A.希爾排序
 B .快速排序
 C.歸并排序
 D.堆排序
 答案: C
 解釋:不穩(wěn)定排序有希爾排序、簡單選擇排序、快速排序、堆排序;穩(wěn)定排序有直接
 插入排序、折半插入排序、冒泡排序、歸并排序、基數(shù)排序。
( 14)數(shù)據(jù)表中有 10000 個元素,如果僅要求求出其中最大的 10 個元素,則采用 ( )
 算法最節(jié)省時間。
 A.冒泡排序
 B .快速排序
 C.簡單選擇排序
 D.堆排序
 答案: D
( 15)下列排序算法中, ()不能保證每趟排序至少能將一個元素放到其最終的位置上。
 A.希爾排序 B .快速排序 C.冒泡排序 D.堆排序
 答案: A
 解釋:快速排序的每趟排序能將作為樞軸的元素放到最終位置;冒泡排序的每趟排序
 能將最大或最小的元素放到最終位置;堆排序的每趟排序能將最大或最小的元素放到最終位置。
2.應(yīng)用題
 ( 1)設(shè)待排序的關(guān)鍵字序列為 {12 , 2, 16 , 30 , 28, 10, 16* , 20 , 6, 18} ,試分別寫
 出使用以下排序方法,每趟排序結(jié)束后關(guān)鍵字序列的狀態(tài)。
 ①直接插入排序
 ②折半插入排序
 ③希爾排序(增量選取 5, 3, 1)
 ④冒泡排序
 ⑤快速排序
 ⑥簡單選擇排序
 ⑦堆排序
 ⑧二路歸并排序
 答案:
 ①直接插入排序
 [2 12] 16 30 28 10 16* 20 6 18
 [2 12 16] 30 28 10 16* 20 6 18
 [2 12 16 30] 28 10 16* 20 6 18
 [2 12 16 28 30] 10 16* 20 6 18
 [2 10 12 16 28 30] 16* 20 6 18
 [2 10 12 16 16* 28 30] 20 6 18
 [2 10 12 16 16* 20 28 30] 6 18
 [2 6 10 12 16 16* 20 28 30] 18
 [2 6 10 12 16 16* 18 20 28 30]
 ②折半插入排序排序過程同①
 ③希爾排序(增量選取 5, 3, 1)
 10 2 16 6 18 12 16* 20 30 28 (增量選取 5)
 6 2 12 10 18 16 16* 20 30 28 (增量選取 3)
 2 6 10 12 16 16* 18 20 28 30 (增量選取 1)
 ④冒泡排序
 2 12 16 28 10 16* 20 6 18 [30]
 2 12 16 10 16* 20 6 18 [28 30]
 2 12 10 16 16* 6 18 [20 28 30]
 2 10 12 16 6 16* [18 20 28 30]
 2 10 12 6 16 [16* 18 20 28 30]
 2 10 6 12 [16 16* 18 20 28 30]
 2 6 10 [12 16 16* 18 20 28 30]
 68
 2 6 10 12 16 16* 18 20 28 30]
 ⑤快速排序
 12[6 2 10] 12 [28 30 16* 20 16 18]
 6[2] 6 [10] 12 [28 3016* 20 16 18 ]
 28 2 6 10 12 [18 16 16* 20 ] 28[30 ]
 182 6 10 12 [16* 16] 18 [20] 28 30
 16* 2 6 10 12 16* [16] 18 20 28 30
 左子序列遞歸深度為 1,右子序列遞歸深度為 3
 ⑥簡單選擇排序
 2 [12 16 30 28 10 16* 20 6 18]
 2 6 [16 30 28 10 16* 20 12 18]
 2 6 10 [30 28 16 16* 20 12 18]
 2 6 10 12 [28 16 16* 20 30 18]
 2 6 10 12 16 [28 16* 20 30 18]
 2 6 10 12 16 16* [28 20 30 18]
 2 6 10 12 16 16* 18 [20 30 28]
 2 6 10 12 16 16* 18 20 [28 30]
 2 6 10 12 16 16* 18 20 28 [30]
 ⑧二路歸并排序
 2 1216 30102816 * 206 18
 2 12 16 3010 16* 2028 6 18
 2 10 12 16 16* 20 28 306 18
 2 6 10 12 16 16* 18 20 28 30
( 2)給出如下關(guān)鍵字序列{ 321 , 156 , 57 , 46 , 28 , 7, 331 , 33, 34 , 63},試按鏈式
 基數(shù)排序方法,列出每一趟分配和收集的過程。
 答案:
 按最低位優(yōu)先法→ 321 → 156→ 57→ 46 → 28 → 7→ 331→ 33 → 34→ 63
 分配 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
 321 33 34 156 57 28
 331 63 46 7
 收集→ 321 → 331 → 33→ 63→ 34 → 156 → 46 → 57→ 7→ 28
( 3)對輸入文件( 101 , 51 , 19, 61 , 3, 71 , 31, 17, 19 , 100, 55 , 20, 9, 30 , 50 , 6, 90 );當(dāng) k=6 時,使用置換 - 選擇算法,寫出建立的初始敗者樹及生成的初始歸并段。
 答案:
 初始敗者樹
3.算法設(shè)計題
 ( 1)試以單鏈表為存儲結(jié)構(gòu),實現(xiàn)簡單選擇排序算法。
 [算法描述 ]:
( 2)有 n 個記錄存儲在帶頭結(jié)點的雙向鏈表中, 現(xiàn)用雙向冒泡排序法對其按上升序進行
 排序,請寫出這種排序的算法。 (注:雙向冒泡排序即相鄰兩趟排序向相反方向冒泡) 。
 [算法描述 ]:
( 3)設(shè)有順序放置的 n 個桶,每個桶中裝有一粒礫石,每粒礫石的顏色是紅,白,藍之一。要求重新安排這些礫石,使得所有紅色礫石在前,所有白色礫石居中,所有藍色礫石居后,重新安排時對每粒礫石的顏色只能看一次,并且只允許交換操作來調(diào)整礫石的位置。
 [ 題目分析 ] 利用快速排序思想解決。由于要求“對每粒礫石的顏色只能看一次” ,設(shè) 3個指針 i , j 和 k,分別指向紅色、白色礫石的后一位置和待處理的當(dāng)前元素。從 k=n 開始,從右向左搜索, 若該元素是蘭色, 則元素不動, 指針左移 (即 k-1 );若當(dāng)前元素是紅色礫石,分 i>=j (這時尚沒有白色礫石)和 i<j 兩種情況。前一情況執(zhí)行第 i 個元素和第 k 個元素交換,之后 i+1 ;后一情況, i 所指的元素已處理過(白色) ,j 所指的元素尚未處理,應(yīng)先將 i 和 j 所指元素交換,再將 i 和 k 所指元素換。對當(dāng)前元素是白色礫石的情況,也可類似處理。
 為方便處理,將三種礫石的顏色用整數(shù) 1、 2 和 3 表示。
 [算法描述 ] :
( 4)編寫算法,對 n 個關(guān)鍵字取整數(shù)值的記錄序列進行整理,以使所有關(guān)鍵字為負值的
 記錄排在關(guān)鍵字為非負值的記錄之前,要求:
 ①采用順序存儲結(jié)構(gòu),至多使用一個記錄的輔助存儲空間;
 ②算法的時間復(fù)雜度為 O(n)
 
( 5)借助于快速排序的算法思想, 在一組無序的記錄中查找給定關(guān)鍵字值等于 key 的記錄。設(shè)此組記錄存放于數(shù)組 r[l…n] 中。若查找成功,則輸出該記錄在 r 數(shù)組中的位置及其值,否則顯示“ not find ”信息。請簡要說明算法思想并編寫算法。
 [ 題目分析 ] 把待查記錄看作樞軸,先由后向前依次比較,若小于樞軸,則從前向后,直
 到查找成功返回其位置或失敗返回 0 為止。
 [ 算法描述 ]
 
( 6)有一種簡單的排序算法,叫做計數(shù)排序。這種排序算法對一個待排序的表進行排序,并將排序結(jié)果存放到另一個新的表中。必須注意的是,表中所有待排序的關(guān)鍵字互不相同,計數(shù)排序算法針對表中的每個記錄,掃描待排序的表一趟,統(tǒng)計表中有多少個記錄的關(guān)鍵字比該記錄的關(guān)鍵字小。假設(shè)針對某一個記錄,統(tǒng)計出的計數(shù)值為 c,那么,這個記錄在新的有序表中的合適的存放位置即為 c。
 ①給出適用于計數(shù)排序的順序表定義;
 ②編寫實現(xiàn)計數(shù)排序的算法;
 ③對于有 n 個記錄的表,關(guān)鍵字比較次數(shù)是多少?
 ④與簡單選擇排序相比較,這種方法是否更好?為什么?
 [算法描述 ]
 ①
②
void CountSort(RecType a[],b[],int n) // 計數(shù)排序算法,將 a 中記錄排序放入 b 中 {for(i=0;i<n;i++) // 對每一個元素{for(j=0,cnt=0;j<n;j++) if(a[j].key<a[i].key) cnt++; // 統(tǒng)計關(guān)鍵字比它小的元素個數(shù)b[cnt]=a[i]; } }//Count_Sort③ 對于有 n 個記錄的表,關(guān)鍵碼比較 n2 次。
 ④ 簡單選擇排序算法比本算法好。簡單選擇排序比較次數(shù)是 n(n-1)/2, 且只用一個交換記錄的空間;而這種方法比較次數(shù)是 n2,且需要另一數(shù)組空間。
 [ 算法討論 ] 因題目要求“針對表中的每個記錄,掃描待排序的表一趟” ,所以比較次數(shù)是
 n2 次。若限制“對任意兩個記錄之間應(yīng)該只進行一次比較” ,則可把以上算法中的比較語句改為
排版和格式真的很費勁啊啊啊啊, 求贊~
總結(jié)
以上是生活随笔為你收集整理的【最详细】数据结构(C语言版 第2版)第八章课后习题答案 严蔚敏 等 编著的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 1040 有几个PAT (25分)——1
 - 下一篇: 1041 考试座位号 (15分)——17