排序


記錄一下幾種排序:

 One:桶排序

桶排序:例如需要排序數的范圍是0~n,那你則需要申請n+1一個變量,也就是說要寫成int a[n+1]。應為我們需要用n+1個“桶”來存儲0~n每一個數出現的次數。

即便只給你5個數進行排序(例如這五個數是1、2100000、12358、6546和8787),你任然需要2100000個“桶”,這就浪費空間!還有,如果現在需要排序

的不再是整數而是一些小數,比如將5.1、1.323、4.54、5.43、1.23這五個數進行從小到大排序又該怎么辦呢?當然桶排序針對連續數其值范圍較小,還是

很簡單、快捷的。算法復雜度O(2*(m+n)),當然了O用來表示時間復雜度,可忽略較小常數O(M+N)。

 

Two:冒泡排序

冒泡排序的基本思想是:每次比較兩個相鄰的元素,如果它們順序錯誤就把他們交換過來。冒泡排序的核心部分是雙重嵌套循環。復雜度是O(N^2)。

 

Three:快速排序

快速排序是由東尼·霍爾所發展的一種排序算法。在平均狀況下,排序n個元素要O(nlogn)次比較。在最壞狀況下則需要O(n^2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他O(nlogn)算法更快,因為它的內部循環可以在大部分的架構上很有效率地被實現出來。

快速排序使用分治策略(Divide and Conquer)來把一個序列分為兩個子序列。步驟為:

  1. 從序列中挑出一個元素,作為"基准"(pivot).
  2. 把所有比基准值小的元素放在基准前面,所有比基准值大的元素放在基准的后面(相同的數可以到任一邊),這個稱為分區(partition)操作。
  3. 對每個分區遞歸地進行步驟1~2,遞歸的結束條件是序列的大小是0或1,這時整體已經被排好序了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM