freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

數(shù)據(jù)結(jié)構(gòu)第10章內(nèi)部排序(編輯修改稿)

2025-06-18 00:10 本頁面
 

【文章內(nèi)容簡介】 mp。 [low].key=pivotkey) + +low。 [high] ←→ [low]。//將比樞軸大的記錄交換到高端 } return low。 //返回樞軸記錄所在位置。 }//Partition 38 Low=high=3, 本趟停止,將支點定位并返回位置信息 例 2: 關(guān)鍵字序列 T=(21, 25, 49, 25*, 16, 08),請寫出快速排序算法的一趟實現(xiàn)過程。 r[i] 0 1 2 3 4 5 6 初態(tài) 21 25 49 25* 16 08 第 1趟 high low 21 08 25 16 49 25* 21pivotkey=21 08 2516 49( 08 , 16 ) 21 ( 25* , 49, 25 ) 25*跑到了前面, 不穩(wěn)定 ! 39 j從高端 掃描 尋找小于pivot的元素 i從低端 掃描 尋找大于pivot的元素 i=low。 j=high。r[0]=r[low]。 pivot=r[low].key。 i j i j amp。amp。r[j].key=pivot j。 r[i] = r[j]。 i j amp。amp。r[i].key=pivot i。 r[j] = r[i]。 r[i] = r[0]。 return ok。 Y Y Y N N N 一趟快速排序算法流程圖 40 void QSort ( SqList amp。L, int low, int high ) { if ( low high) { pivot = Partition ( L, low, high )。 QSort ( L, low, pivot1)。 QSort ( L, pivot+1, high )。 } } 整個快速排序的遞歸算法: 見教材 P276 //長度 1 //對順序表 L中的子序列 r[ low… high] 作快速排序 //QSort void QuickSort ( SqList amp。L) { QSort (L, 1, )。 } 對順序表 L進行快速排序的操作函數(shù)為: 41 例 3: 以關(guān)鍵字序列( 256, 301, 751, 129, 937, 863, 742,694, 076, 438)為例,寫出執(zhí)行快速算法的 各趟 排序結(jié)束時,關(guān)鍵字序列的狀態(tài)。 原始序列: 256, 301, 751, 129, 937, 863, 742, 694, 076, 438 第 1趟 第 2趟 第 3趟 第 4趟 256, 301, 751, 129, 937, 863, 742, 694, 076, 438 076, 129, 256, 751, 937, 863, 742, 694, 301, 438 要求模擬算法實現(xiàn)步驟 256 076 301 129 751 256 , , , 438, 301, 694, , , 863, 9 7751 076, 129, 256, 438, 301, 694, 742, 751, 863, 937 , , , 301, , , , , ,438 076, 129, 256, 301, 438, 694, 742, 751, 863, 937 時間效率: O(nlog2n)—因為每趟確定的元素呈指數(shù)增加 空間效率: O( log2n) —因為算法的遞歸性,要用到??臻g 穩(wěn) 定 性: 不穩(wěn)定 —因為可選任一元素為樞軸。 42 快速排序算法詳細分析: ?快速排序是遞歸的,需要有一個棧存放每層遞歸調(diào)用時的指針和參數(shù) (新的 low和 high) 。 ?可以證明,函數(shù) quicksort的平均計算時間也是O(nlog2n)。 實驗結(jié)果表明:就平均計算時間而言,快速排序是我們所討論的所有內(nèi)排序方法中最好的一個 。 ?最大遞歸調(diào)用層次數(shù)與遞歸樹的深度一致,理想情況為 ?log2(n+1)? 。因此,要求存儲開銷為 o(log2n)。 43 ? 如果每次劃分對一個對象定位后,該對象的左側(cè)子序列與右側(cè)子序列的長度相同,則下一步將是對兩個長度減半的子序列進行排序,這是最理想的情況。此時,快速排序的趟數(shù)最少。 44 ?在最壞的情況,即待排序?qū)ο笮蛄幸呀?jīng)按其關(guān)鍵字從小到大排好序的情況下, 其遞歸樹成為單支樹 ,每次劃分只得到一個比上一次少一個對象的子序列。這樣,必須經(jīng)過 n1 趟才能把所有對象定位,而且第 i 趟需要經(jīng)過 ni 次關(guān)鍵字比較才能找到第 i 個對象的安放位置,總的關(guān)鍵字比較次數(shù)將達到 n2/2 ? 快速排序是一個 不穩(wěn)定 的排序方法 45 討論 2. “快速排序 ” 是否真的比任何排序算法都快? 設(shè)每個子表的支點都在中間(比較均衡),則: 第 1趟比較,可以確定 1個元素的位置; 第 2趟比較( 2個子表),可以再確定 2個元素的位置; 第 3趟比較( 4個子表),可以再確定 4個元素的位置; 第 4趟比較( 8個子表),可以再確定 8個元素的位置; …… 只需 ?log2n? + 1趟便可排好序。 ——基本上是!因為每趟可以確定的數(shù)據(jù)元素是呈 指數(shù)增加的! 46 而且,每趟需要比較和移動的元素也呈指數(shù)下降,加上編程時使用了交替逼近技巧,更進一步減少了移動次數(shù),所以速度特別快。 教材 P276有證明:快速排序的平均排序效率為 O(nlog2n); 但最壞情況 (例如已經(jīng)有序 )下仍為 O(n2),改進措施見 P277。 47 選擇排序的基本思想是:每一趟 (例如第 i 趟,i = 1, …, n1) 在后面的 ni+1 個待排序?qū)ο笾羞x出關(guān)鍵字最小的對象 , 作為有序?qū)ο笮蛄械牡? i 個對象。待到第 n1 趟作完,待排序?qū)ο笾皇O?1個,就不用再選了。 (Selection Sort) 簡單選 擇排序 樹形選擇排序 堆排序 48 簡單選 擇排序 Simple Selection Sort ? 基本步驟為: i從 1開始,直到 n1,進行 n1趟排序,第 i 趟的排序過程為: 在一組對象 r[i]~ r[n] (i=1,2,…,n 1)中選擇具有最小關(guān)鍵字的對象;并和第 i 個對象進行交換; 49 簡單選擇排序的算法 void SelectSort(SqList amp。L) { for (int i=1。 i。++i) { j=SelectMinKey(L,i)。 //在 [i..]中選擇 key最小的記錄 if (i!=j) [i]←→ [j]。//與第 i個記錄交換 } } 50 21 25 49 25* 16 08 0 1 2 3 4 5 21 25* i = 1 49 25 16 25 16 08 49 08 25* 49 21 i = 2 i = 3 08 16 25* 25 21 初始 最小者 08 交換 21,08 最小者 16 交換 25,16 最小者 21 交換 49,21 51 49 25* 0 1 2 3 4 5 25* i = 5 25 16 08 49 25* 49 21 結(jié)果 i = 4 08 16 25 21 最小者 25* 無交換 最小者 25 無交換 25 21 16 08 各趟排序后的結(jié)果 52 算法分析 ? 直接選擇排序的關(guān)鍵字比較次數(shù) KCN與對象的初始排列無關(guān)。第 i 趟選擇具有最小關(guān)鍵字對象所需的比較次數(shù)總是 ni1 次,此處假定整個待排序?qū)ο笮蛄杏? n 個對象。因此,總的關(guān)鍵字比較次數(shù)為 ???????? 20 211ninninKCN )()(時間復雜度? O( n2) 53 ? 對象的移動次數(shù)與對象序列的初始排列有關(guān)。當這組對象的初始狀態(tài)是按其關(guān)鍵字從小到大有序的時候,對象的移動次數(shù) RMN = 0,達到最少。 ? 最壞情況是每一趟都要進行交換,總的對象移動次數(shù)為 RMN = 3(n1)。 ? 直接選擇排序是一種 不穩(wěn)定 的排序方法。 54 樹形選擇排序 (錦標賽排序 ) ? 它的思想與體育比賽時的淘汰賽類似。首先取得 n 個對象的關(guān)鍵字,進行兩兩比較,得到 ?n/2? 個比較的優(yōu)勝者 (關(guān)鍵字小者 ),作為第一步比較的結(jié)果保留下來。然后對這 ?n/2? 個對象再進行關(guān)鍵字的兩兩比較, … ,如此重復,直到選出一個關(guān)鍵字最小的對象為止。 ? 在圖例中,最下面是對象排列的初始狀態(tài),相當于一棵滿二叉樹的葉結(jié)點,它存放的是所有參加排序的對象的關(guān)鍵字。 55 08 Winner 21 08 08 63 25* 21 21 25 49 25* 16 08 63 56 勝者樹的概念 ? 每次兩兩比較的結(jié)果是把關(guān)鍵字小者作為優(yōu)勝者上升到雙親結(jié)點 , 稱這種比賽樹為勝者樹 。 ? 勝者樹最頂層是樹的根,表示最后選擇出來的具有最小關(guān)鍵字的對象。 57 08 Winner (勝者 ) 21 08 08 63 25* 21 21 25 49 25* 16 08 63 形成初始勝者樹(最小關(guān)鍵字上升到根) a[0] 關(guān)鍵字比較次數(shù) : 6 58 16 Winner (勝者 ) 21 16 16 63 25* 21 21 25 49 25* 16 63 輸出冠軍并調(diào)整勝者樹后樹的狀態(tài) a[1] 關(guān)鍵字比較次數(shù) : 2 59 21 Winner (勝者 ) 21 63 63 25* 21 21 25 49 25* 63 輸出亞軍并調(diào)整勝者樹后樹的狀態(tài) a[2] 關(guān)鍵字比較次數(shù) : 2 60 25 Winner (勝者 ) 25 63 63 25* 25 25 49 25* 63 輸出第三名并調(diào)整勝者樹后樹的狀態(tài) a[3] 關(guān)鍵字比較次數(shù) : 2 61 25* Winner (勝者 ) 25* 63 63 25* 49 25* 63 輸出第四名并調(diào)整勝者樹后樹的狀態(tài) a[4] 關(guān)鍵字比較次數(shù) : 2 62 63 Winner (勝者 ) 63 63 63 全部比賽結(jié)果輸出時樹的狀態(tài) a[6] 關(guān)鍵字比較次數(shù) : 2 63 算法分析 ? 錦標賽排序構(gòu)成的樹是滿的完全二叉樹,其深度為 ?log2(n+1)?,其中 n 為待排序元素個數(shù)。 ? 除第一次選擇具有最小關(guān)鍵字的對象需要進行 n1 次關(guān)鍵字比較外,重構(gòu)勝者樹選擇具有次小、再次小關(guān)鍵字對象所需的關(guān)鍵字比較次數(shù)均為 O(log2n)。總關(guān)鍵字比較次數(shù)為 O(nlog2n)。 ? 對象的移動次數(shù)不超過關(guān)鍵字的比較次數(shù),所以錦標賽排序總的時間復雜度為 O(nlog2n)。 ? 這種排序方法雖然減少了許多排序時間,但是使用了較多的附加存儲。 錦標賽排序是一個穩(wěn)定的排序方法。 64 堆排序 (Heap Sort) ? 利用堆及其運算,可以很容易地實現(xiàn)選擇排序的思路。堆
點擊復制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1