排序複雜度詳解(2)

來源:互聯網
上載者:User

4.冒泡排序:

      是一種簡單的穩定的交換排序,其排序過程為:對於相鄰的元素進行大小比較,如果滿足排序要求,則不進行交換,否則將兩個數進行交換。

      如序列{30, 12, 52, 23, 15, 65, 31, 58, 20,63}:

      以下是第一趟:30跟12比較,30>12交換位置,30<52,不交換位置,以此類推,將序列中最大的數放到最後位置,共執行n - 1次比較。共需要做 n - 1 次起泡。

    最好時間複雜度:o(n);原因:若檔案是正序的時候,只需要一趟冒泡,n - 1次比較,移動次數為0就可以完成排序。因此最好的時間複雜度為o(n);

    最壞時間複雜度:o(n^2);原因:若檔案是反序的時候,需要n - 1 趟冒泡,每趟比較 n - i 次關鍵字;比較的最大值為n*(n-1)/2=o(n^2),移動次數最大值為3n(n-1)/2=o(n^2)(註:需要交換的次數為n*(n-1)/2,而每次交換都需要有三條命令:temp = a;a = b;b = temp,這樣就要乘以3啦);所以最壞時間複雜度為o(n^2)。

5.快速排序:不穩定排序

     例:{49.38.65.97.76.13.27} 

     首先以49為標準,將序列分為兩部分,左邊部分比49小..右邊部分比49大,這一步如:

圖來源於:http://www.bsgz.net/Article/Class20/Class88/sjjg/200609/936.html

     最壞時間複雜度:o(n^2);原因:當每次劃分選取的基準都是當前無序區中關鍵字最小(或最大)的記錄,那麼必須做n - 1次劃分,第 i 次劃分開始時區間長度為 n - i +1,所需的比較次數為 n - i,故總的比較次數達到最大值 n*(n-1)/2=o(n^2),由於移動次數不大於比較次數,所以最壞時間複雜度為o(n^2)。

     最好時間複雜度:o(nlog2n);原因:當每次劃分選取的基準都是中值時,可以用遞迴樹來解釋,樹的高度 d 與節點數 n 的關係是:

d^2-1 = n;所以遞迴樹高度 d = log2(n+1)=o(log2n) ,而每一層遞迴子節點中的時間複雜度為 o(n)(註:需要比較的總次數小於 n 次,移動次數比比較次數少);所以通過:每一層遞迴子節點中的時間複雜度*遞迴樹高度 求出總的時間複雜度:o(nlog2n)

6.歸併排序:穩定排序

     將兩個或兩個以上的有序子表合并成一個新的有序表。

     例:{72.28.51.17.96.62.87.33}

  1. {28.72}{17.51}{62.96}{33.87}
  2. {17.28.51.72}{33.62.87.96}
  3. {17.28.33.51.62.72.87.96}

     最壞時間複雜度:o(nlog2n);

     最好時間複雜度:o(nlog2n);都需要log2n趟二路並歸,每趟歸併的時間為o(n)所以時間複雜度都為o(nlog2n)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.