每天來點演算法_1

piriter發表於2014-04-13

歸併排序:

主要過程:將兩個排好序的陣列(具體資料結構視實際情況而定)合併成從大到小的陣列。

缺點:不是在陣列自身儲存空間進行操作。

時間複雜度:O(nlgn)

插入排序:

主要過程:當前的關鍵字與前面的關鍵字進行比較,插入到合適的地方。

時間複雜度:O(n*n)

氣泡排序:

主要過程:相鄰之間的關鍵字進行大小比對和交換。如果從尾部開始比較交換,則"冒泡"就更加形象了。

時間複雜度:O(n*n)

堆排序:

堆的概念:堆換一種說法是完全二叉樹,是一種重要的資料結構。堆可分為最大堆和最小堆。其中優先順序佇列就用到了堆的概念和技術。

主要過程:父節點大於左右子節點,即父節點的關鍵字是最大的。根節點和最後的葉節點進行交換,則最後的葉節點的關鍵字是最大(小)的,然後剔除最後的葉節點,對以根節點(數值變換過)為中心對堆進行重新排序。

複雜度:O(nlgn)

快速排序:

主要過程:在子組中隨機選擇一個數作為分離該子組的基準,然後將小於該基準值的關鍵字集中到該基準的左邊,大於該基準值的關鍵字集中到該基準的右邊。接下來就是遞迴呼叫的問題了。

最差複雜度:O(n*n)(可通過隨機化輸入分佈來避免)

平均複雜度:O(nlgn)(係數較小,所以該演算法在排序中使用率較高)

相關文章