3-17(排序)

排序:算法

就是使一串數據,按照其中的某個或某些關鍵字大小,遞增或遞減的排序操做。ide


一、插入排序優化


直接插入排序:在一個有序的序列中插入數據,使其序列仍然有序。spa

時間複雜度爲O(N^2),最好狀況爲O(N)。指針

空間複雜度爲O(1)排序

是一種穩定的排序算法。it


希爾排序:先選定一個整數gap,把待排序的數據分爲若干組,並對每一組進行排序。也就是直接插入排序的優化,根據gap大小,先進行了一次預排序,再將gap依次改變直到爲1,其排序就是直接插入排序了。gap必定爲:gap=gap/n+1;加1是爲了gap必定會等於1.class

當gap>1時,都是預排序,當gap=1時,就爲直接插入排序。效率

時間複雜度爲O(N^1.3)變量

是不穩定的排序。


二、選擇排序

思想:每次在待排序數據中選出最小或最大的數據,存放在序列的起始位置。


直接選擇排序:效率很是低,

時間複雜度爲O(N^2);

空間複雜度爲O(1);

排序算法不是穩定的。


堆排序:是利用建堆來排序的。

若是須要降序,則建小堆,若是升序,則建大堆

時間複雜度爲O(N*logN)

空間複雜度爲O(1);

是不穩定的排序算法。



三、交換排序


冒泡排序:就是將數據一一比較,每次比較完成都會產生一個數,在其本身位置上,須要比較n-1次。

時間複雜度爲O(N^2)。

空間複雜度爲O(1)。

時穩定的排序算法。


快速排序

時間複雜度爲O(N*logN)

空間複雜度爲O(logN)

不穩定的排序算法。


hoare法(左右指針法)

就是將begin和end依次移動,若是升序,則begin這段找大與key,end找小於key的,找到就互換,知道begin==end。

最右邊作key,左邊先走,左邊作key,右邊先走。由於這樣作,必定能夠肯定最後停的位置會和key交換。


挖坑法:

就是找左/右一端爲key,使其爲一個空位,在其右/左找個數插入其坑位,這樣被插入數據的位置就變爲坑位,再在左/右找個數插入,知道begin==end。



先後指針法

定義2個變量prev和cur,cur=begin,prev=begin-1;cur找小,遇到小,則prev前進一個,再互換cur和prev的值。遇到大,則cur前進,prev不變。

相關文章
相關標籤/搜索