乙個很好的書.最後看了排序的東西
平方效能是任何通過相鄰交換算的所固有的.
希爾排序:
希爾排序的增量是插入排序的改進. //類似高數的差分
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 ...