演算法導論 第七章 排序

2021-06-10 06:55:49 字數 851 閱讀 5884

什麼是穩定排序?

n個記錄的序列為{r1,r2,r3-----rn},其相應的鍵值序列為{k1,k2,k3------kn},假設ki=kj,若在排序前的序列中ri在rj之前,即 i注意:穩定性是排序方法本身的特性,與資料無關,換句話說,一種排序方法如果是穩定的,則對所有的資料序列都是穩定的,反過來,如果在一組資料上出現不穩定的現象,則該方法是不穩定的。

排序可以分為2大類:

1:內部排序(internal sorting ):待排序的記錄全部存放在計算機記憶體中進行的排序過程

2:外部排序(external sorting):待排序的數量較大,記憶體不能儲存全部記錄,需要對外進行訪問的排序過程

插入排序

typedef struct

recordtype;

typedef recordtype list[n+1];

void straightinsertsort(list r,int n)

{ int i,j;

for(i=2;i<=n;i++)

{ r[0]=r[i];

j=i-1;

while(r[0].key

記錄r有兩個作用,其一是進入查詢迴圈之前,他儲存了r【j】的值,使得不至於因記錄的後移而丟失r【i】中的內容;其二是起崗哨作用,在while迴圈中「監視」陣列下標變數j是否越界,一旦越界(即j<1),r自動控制while迴圈的結束,從而避免了在while迴圈中每一次都要檢測j是否越界,這一技巧的應用,使得測試迴圈條件的時間大約減少一半。

直接插入排序的時間複雜度為o(n的平方),若待排序記錄的數量很大時,一般不選用直接插入排序。從空間來看,空間複雜度為o(1)

直接插入排序方法是穩定的。

交換排序

演算法導論 第七章《快速排序》

本章介紹了快速排序及其演算法分析,快速排序採用的是分治演算法思想,對包含n個數的輸入陣列,最壞情況下執行時間為 n 2 但是平均效能相當好,期望的執行時間為 nlgn 另外快速排序能夠就地排序 我理解是不需要引入額外的輔助空間,每次劃分能確定乙個元素的具體位置 在虛擬環境中能很好的工作。快速排序演算...

演算法導論 第七章 快速排序

快速排序通常是實際應用中最好的選擇,因為它的平均效能非常好,它的期望時間複雜度為o nlng 而且隱含的常數因子非常小。另外,它還是原址排序。quicksort a,p,r if p隨著程式的執行,陣列被劃分為4個 小於主元,大於主元,未劃分,主元,可能有空的 區域。對於partition中的第3 ...

演算法導論第七章快速排序

一 快速排序概述 關於快速排序,我之前寫過兩篇文章,一篇是寫vc庫中的快排函式,另一篇是寫了快排的三種實現方法。現在再一次看演算法導論,發現對快速排序又有了些新的認識,總結如下 1 快速排序最壞情況下的時間複雜度為o n 2 雖然最壞情況下效能較差,但快排在實際應用中是最佳選擇。原因在於 其平均效能...