在電腦科學與數學中,排序演算法是一種基本並且常用的演算法,乙個排序演演算法是一種能將一串資料依照特定排序方式的一種演演算法。有效的排序演演算法在一些演演算法中是重要的,如此這些演演算法才能得到正確解答。排序演演算法也用在處理文字資料以及產生人類可讀的輸出結果。由於實際工作中處理的數量巨大,所以排序演算法對演算法本身的速度要求很高。現介紹c/c++中幾種常見排序演算法的簡單運用方法。
常見排序演算法的實現(一)→插入排序
插入排序是最簡單最直觀的排序演算法了,它的依據是:遍歷到第n個元素的時候前面的n-1個元素已經是排序好的了,那麼就查詢前面的n-1個元素把這第n個元素放在合適的位置,如此下去直到遍歷完序列的元素為止。
演算法的複雜度也是簡單的,排序第乙個需要1的複雜度,排序第二個需要2的複雜度,因此整個的複雜度就是
1 + 2 + 3 + …… + n = o(n ^ 2)的複雜度。[詳細內容
]常見排序演算法的實現(二)→shell排序
shell排序是對插入排序的乙個改裝,它每次排序把序列的元素按照某個增量分成幾個子串行,對這幾個子串行進行插入排序,然後不斷縮小增量擴大每個子串行的元素數量,直到增量為一的時候子串行就和原先的待排列序列一樣了,此時只需要做少量的比較和移動就可以完成對序列的排序了。[詳細內容
]常見排序演算法的實現(三)→堆排序
堆的定義:
n個關鍵字序列kl,k2,…,kn稱為堆,當且僅當該序列滿足如下性質(簡稱為堆性質):
(1) ki≤k2i且ki≤k2i+1 或(2)ki≥k2i且ki≥k2i+1(1≤i≤)
若將此序列所儲存的向量r[1……n]看做是一棵完全二叉樹的儲存結構,則堆實質上是滿足如下性質的完全二叉樹:樹中任一非葉結點的關鍵字均不大於(或不小於)其左右孩子(若存在)結點的關鍵字。
堆的這個性質使得可以迅速定位在乙個序列之中的最小(大)的元素。
堆排序演算法的過程如下:1)得到當前序列的最小(大)的元素
(2)把這個元素和最後乙個元素進行交換,這樣當前的最小(大)的元素就放在了序列的最後,而原先的最後乙個元素放到了序列的最前面
(3)的交換可能會破壞堆序列的性質(注意此時的序列是除去已經放在最後面的元素),因此需要對序列進行調整,使之滿足於上面堆的性質。重複上面的過程,直到序列調整完畢為止。[詳細內容]
常見排序演算法的實現(四)→氣泡排序
氣泡排序演算法的思想:很簡單,每次遍歷完序列都把最大(小)的元素放在最前面,然後再對剩下的序列從父前面的乙個過程,每次遍歷完之後待排序序列就少乙個元素,當待排序序列減小為只有乙個元素的時候排序就結束了。因此,複雜度在最壞的情況下是o(n ^ 2)。[詳細內容
]常見排序演算法的實現(五)→快速排序
快速排序的演算法思想: 選定乙個樞紐元素,對待排序序列進行分割,分割之後的序列乙個部分小於樞紐元素,乙個部分大於樞紐元素,再對這兩個分割好的子串行進行上述的過程。[詳細內容
]常見排序演算法的實現(六)→歸併排序
歸併排序的演算法思想:把待排序序列分成相同大小的兩個部分,依次對這兩部分進行歸併排序,完畢之後再按照順序進行合併。 [詳細內容
]總結了一些常見的排序演算法,面試必備啊!
常見排序演算法的實現
在電腦科學與數學中,排序演算法是一種基本並且常用的演算法,乙個排序演演算法是一種能將一串資料依照特定排序方式的一種演演算法。有效的排序演演算法在一些演算 法中是重要的,如此這些演演算法才能得到正確解答。排序演演算法也用在處理文字資料以及產生人類可讀的輸出結果。由於實際工作中處理的數量巨大,所以排序演...
常見排序演算法的實現
插入排序是最簡單最直觀的排序演算法了,它的依據是 遍歷到第n個元素的時候前面的n 1個元素已經是排序好的了,那麼就查詢前面的n 1個元素把這第n個元素放在合適的位置,如此下去直到遍歷完序列的元素為止。演算法的複雜度也是簡單的,排序第乙個需要1的複雜度,排序第二個需要2的複雜度,因此整個的複雜度就是 ...
常見的排序演算法實現
public class sort array j 1 temp shell排序,當distant 1時。看似是普通的插入排序,但是實際上的複雜度卻很小,因為此時已經差不多排好序了,需要數字挪位的情況不多 public static void shellsort int array 快速排序 pub...