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

正文內(nèi)容

[計算機軟件及應用]數(shù)據(jù)結構(編輯修改稿)

2024-11-15 04:11 本頁面
 

【文章內(nèi)容簡介】 別對這兩個子序列重復施行上述方法,直到所有的記錄都排在相應位置上為止。 21 25 49 25* 16 08 1 2 3 4 5 6 pivot 16 08 i = 2 49 i = 3 08 16 25 25* 21 21 21 25* i = 1 25 16 49 08 pivot pivot 25* 25 49 pivot 算法描述: 一趟劃分算法: int Partition(SqList amp。L, int low, int high){ [0] = [low]。 // 用子表的第一個記錄作基準記錄 pivotkey = [low].key。 //基準記錄關鍵字 while( lowhigh ){ // 從表的兩端交替地向中間掃描 while(lowhigh amp。amp。 [high].key=pivotkey) high。 [low] = [high]。 while(lowhigh amp。amp。 [low].key=pivotkey) low++。 [high] = [low]。 } [low] = [0]。 //基準記錄到位 return low。 // 返回樞軸位置 } void QSort(SqList amp。L, int low, int high) { int pivotloc。 if( low high ) { // 長度大于 1 pivotloc=Partition(L,low,high)。 QSort(L,low,pivotloc1)。 // 對低子表遞歸排序 QSort(L,pivotloc+1,high)。 // 對高子表遞歸排序 } } ?算法 quicksort是一個遞歸的算法,其遞歸樹如圖所示。 21 25* 25 49 08 16 ? 算法 partition利用序列第一個記錄作為基準,將整個序列劃分為左右兩個子序列。算法中執(zhí)行了一個循環(huán),只要是關鍵字小于基準記錄關鍵字的記錄都移到序列左側(cè),最后基準記錄安放到位,函數(shù)返回其位置 算法分析: ? 從快速排序算法的遞歸樹可知,快速排序的趟數(shù)取決于遞歸樹的深度。 ? 如果每次劃分對基準記錄定位后,該記錄的左側(cè)子序列與右側(cè)子序列的長度相同,則下一步將是對兩個長度減半的子序列進行排序,這是最理想的情況。 ? 在 n個元素的序列中,對一個記錄定位所需時間為 O(n)。若設 T(n) 是對 n 個元素的序列進行排序所需的時間,而且每次對一個記錄正確定位后,正好把序列劃分為長度相等的兩個子序列,此時,總的計算時間為: T(n) ? n + 2 T(n/2 ) // 一趟劃分比較次數(shù)為 n1次 ? n + 2 ( n/2 + 2T(n/4) ) = 2n + 4T(n/4) ? 2n + 4 ( n/4 +2T(n/8) ) = 3n + 8T(n/8) ……… ? n log2n + nT(1) = O(n log2n ) ? 可以證明 , 函數(shù) quicksort的平均計算時間也是 o(nlog2n)。 實驗結果表明:就平均計算時間而言 , 快速排序是我們所討論的所有內(nèi)排序方法中最好的一個 。 ?最壞的情況下: – 即待排序記錄序列已經(jīng)按其關鍵字從小到大排好序的情況下 , 其遞歸樹成為單支樹 , 每次劃分只得到一個比上一次少一個記錄的子序列 。 這樣 , 必須經(jīng)過 n1 趟才能把所有記錄定位 , 而且第 i 趟需要經(jīng)過 ni 次關鍵字比較才能找到第 i 個記錄的安放位置 , 總的關鍵字比較次數(shù)將達到: 2121 211nnninni???????)()(? 其排序速度退化到簡單排序的水平,比直接插入排序還慢。 ? 若能更合理地選擇 基準記錄 ,使得每次劃分所得的兩個子序列中的記錄個數(shù)盡可能地接近,可以加速排序速度,但是由于記錄的初始排列次序是隨機的,這個要求很難辦到。 ? 有一種改進辦法:取每個待排序記錄序列的第一個記錄、最后一個記錄和位置接近正中的 3個記錄,取其關鍵字居中者作為 基準記錄 。 用居中關鍵字記錄作為基準記錄 快速排序是一種不穩(wěn)定的排序方法 。 對于 n 較大 的平均情況而言 , 快速排序是 “快速 ” 的 , 但是當 n 很小時 , 這種排序方法往往比其它簡單排序方法還要慢 。 08 16 21 25 25* 49 0 1 2 3 4 5 pivot 21 初始 08 16 21 25 25* 49 08 25* 08 16 21 25 25* 49 i = 1 i = 2 基本思想 :每一趟 (例如第 i 趟, i = 1, 2, …, n1) 在后面 ni+1 個待排序記錄中選出關鍵字最小的記錄 , 作為有序記錄序列的第 i 個記錄。待到第 n1 趟作完,待排序記錄只剩下 1個,就不用再選了。 選擇排序 ? 首先在所有記錄中選出關鍵字最小的記錄,把它與第 1個記錄交換,然后在其余的記錄中再選出關鍵字次最小的記錄與第 2個記錄交換,以次類推 …… ,直到所有記錄排序完成。 簡單選擇排序 (Select Sort) 21 25 49 25* 16 08 0 1 2 3 4 5 初始 21 25* i = 0 25 16 49 08 最小者 08 交換 21,08 25 16 08 25* 49 21 i = 1 最小者 16 交換 25,16 49 i = 2 08 16 25* 25 21 最小者 21 交換 49,21 0 1 2 3 4 5 49 25* i = 3 08 16 25 21 最小者 25* 無交換 25* i = 4 49 最小者 25 無交換 25 21 16 08 25 16 08 25* 49 21 結果 各趟排序后的結果 0 1 2 3 4 5 49 16 08 25* 49 21 08 25* 25 21 i =1時選擇排序的過程 i k j 49 25 08 25* 16 21 i k j 49 ? 25 25* ? 25 16 25 i k j 16 25 49 25 08 25* 16 21 0 1 2 3 4 5 i k j 21 ? 16 k 指示當前序列中最小者 void SelectSort(SqList amp。L){ int i, j。 RedType temp。 for( i=0。 i。 i++ ){ // 做 n1趟選擇排序 k = i。 // 在當前無序區(qū)選關鍵字最小的記錄 for( j=i+1。 j。 j++ ) if( [j].key [k].key ) k = j 。 if( k != i ){ temp = [i]。 [i] = [k]。 [k] =temp。 } } } 簡單選擇排序的算法 : 算法分析 : 簡單選擇排序的 關
點擊復制文檔內(nèi)容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1