排序演算法 希爾排序 amp 快速排序

2021-05-25 17:06:22 字數 1004 閱讀 1008

乙個很好的書.最後看了排序的東西

平方效能是任何通過相鄰交換算的所固有的.

希爾排序:

希爾排序的增量是插入排序的改進.       //類似高數的差分

n個不同陣列的平均逆序數是n*(n-1)/4

希爾排序最壞情況是奇數字都是較小數.偶數字都是較大數.最後一次的複雜度平方

如果連續增量是互質的複雜度為o n^(5/4)

如果是除以2.2 複雜度是 o n^(7/6) 沒有人知道為什麼.這個是模擬的結果

希爾排序的希爾增量類似數學歸納法裡面的

1,2,3,4,...n成立

假設n+1,n+2,n+3,n+4,...2n-1成立如果

2n+1,2n+2,2n+3,2n+4,...3n-1成立

則所有都成立.

希爾排序的**

code:

public

static

super anytype>>   

void shellsort(anytype [  ]a )   

//選取希爾增量.保證增量到1.為什麼是2.2 作者也不知道

for(int i=gap;i   

}  

快速排序:   //jdk裡面系統排序就是這個排序.

快速排序最好情況利用了中間數是調和數的事實

挑選中心點是快速排序效能中至關重要的部分.千萬不能以第乙個為中心.選取中點為中心點是個合理但是消極的策略

選取策略:第乙個元素.最後個元素.中點元素不大不小的那個放到為中心點.

快速排序推薦策略:

step1:交換中心點到最後的位置.

step2:從左到右執行i.從右到左執行j.遇到乙個之前的大元素時i停.遇到乙個小元素的時候j停.交換i j的值.值到i j相等停止

step3:位置i和最後的那個數交換(中心點)

書還了.還有個作業.如果排序的數各個都相等怎麼辦?好的演算法必然這個也要考慮.通常做法是繼續排序.或者改進優化.繼續排序可能上面的i和j停不了.到了中點終止.呵呵.正好

ds排序 希爾排序 排序 快速排序

相信我們在沒接觸過排序知識之前,一定會覺得快速排序非常具有魅力,不因別的單純快排這個名字就讓人不明覺厲,但是了解乙個演算法不應該只知道code,了解思想,應用非常重要。我先問出我心中非常好奇的問題 快排為啥叫快排,快排是所有排序裡面效能最好的嗎?快排適合什麼情況呢,還是無論什麼情況下快排總是最好的 ...

希爾排序,堆排序,快速排序

插入排序的改進演算法,不穩定的排序演算法,空間複雜度為o 1 public static void shellsort int a 氣泡排序的改進演算法,不穩定的排序演算法 空間複雜度在o log2n 和o n 之間 時間複雜度在o n 和o n2 之間,平均時間複雜度為o nlog2n 而當陣列初...

希爾排序,快速排序,堆排序

最近在準備資料結構的考試,於是用部落格記錄下自己複習的過程。今天的內容是三種高階排序。希爾排序 當序列增量為incr k 2 t k 1 1時,時間複雜度為o n1.5 以序列增量分組,對每組進行大小調整。templatevoid shellinsert t elem,int n,int incr ...