1. 程式人生 > >排序算法(2)

排序算法(2)

比較 指向 希爾排序 pos blog gpo 當前 mage .com

時間復雜度為O(N*logN)的三個算法,歸並排序、快速排序、堆排序、希爾排序

歸並排序:

將數組分為若幹個步長為1的區間,把兩個相鄰的區間合並,成為一個步長為2的有序區間 ,然後把兩個相鄰的步長為2的區間合並,成為一個步長為4的有序區間,以此類推,直到最後所有都有序

技術分享圖片

新建一個數組,將需要合並的區間A、區間B從第一個開始比較,如果A中當前指向的數和B指向的比較,更小,在新建的數組放入A中指向的數,A中的指針向前移一位,數組中指針向前移一位。若B中指向的數小,同理。直到A或B的全部數都放進新建數組中,將另一個數組剩下的值接在後面。新數組為合並後的新的有序區間。遞歸調用分解方法,分解後調用合並方法。

快速排序:

將數組最左、中間、最右的數大小排序,最小的放在最左,第二大的放在中間,最大的放在最右

將中間的數放在數組倒數第二個位置,以這個數作為標準排序。設置指針i、j,判斷 i 指向的數是否比倒數第二個數大,不是則 i 向右移動一位 ,直到找到比倒數第二個數大或者 i == j 時;i 停下後,判斷 j 指向的數是否比倒數第二個數小,如果是則和 i 指向的數交換,否則向左移動一位繼續尋找,找到則交換。i 最終停下的位置和倒數第二個數交換。此時數組分為比排序標準的數小和比排序標準數大兩部分。在這兩部分中再分別進行剛才的快速排序。

技術分享圖片

排序算法(2)