希爾排序(shell sort)
演算法描述:
step1:先將整個待排元素序列分割成若干個子串行(由相隔某個「增量」的元素組成的)分別進行直接插入排序。
step2:依次縮減增量再進行排序。
step3:待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進行一次直接插入排序。
演算法結束。
因為直接插入排序在元素基本有序的情況下(接近最好情況),效率是很高的,因此希爾排序相較於前幾種方法有較大的提公升。
ps:學資料結構和演算法最好的方法就是**,能看懂圖,就別看繁瑣的文字描述,看不懂圖,再結合文字描述看懂,演算法也就學會了
注:這種寫法插入排序時使用了交換法
希爾演算法的關鍵就是掌握縮小增量序列,即(希爾增量),其平均時間複雜度為o(nlogn),最壞時間複雜度依然為o(n^2),一些經過優化的增量序列如hibbard經過複雜證明可使得最壞時間複雜度為o(n^1.5)。
穩定性:不穩定
[1]
[2]
Python3 資料結構之遞迴
遞迴 def fact x if x 1 return 1 else return x fact x 1 tail recursion 尾遞迴 def tail recusion x,total 1 if x 1 return total else return tail recusion x 1,...
Python3 資料結構
python中列表是可變的,這是它區別於字串和元組的最重要的特點,一句話概括即 列表可以修改,而字串和元組不能。列表的基本特點 操作 描述把乙個元素新增到列表的結尾,相當於 a len a x list.extend l 在列表末尾新增多個物件,引數可謂迭代物件相當於 a len a l list....
Python3 資料結構之快速排序
然後使用快速排序使用了分而治之 divide and conquer,d c 的思想 主要思想就是把乙個無序陣列分為3個部分 遞迴的思想重複以上步驟 參考演算法 給出的 quicksort def quick sort arr if len arr 2 return arr else pivot a...