希爾排序:是插入排序的一種改進版,通過不同的步長,將序列分組,並對每組元素進行插入排序,直到最後步長為1,整個序列排序完成。
最優時間複雜度:根據步長不同而不同
最壞時間複雜度:o(n²)
是不穩定排序,插入排序是穩定的,但是由於希爾排序按照步長對資料分組,有可能相同的資料在不同的組當中順序會被交換。
def shellsort(datalist):
#按照公升序排序
#如果序列長度為1,則步長為0,不用排序
#如果序列長度為2,則步長為1,對整個序列做插入排序
length = len(datalist)
gap = length//2
print(gap)
while gap > 0:
#按gap分組插入排序
for start in range(gap,length):
current = start
while current >= gap:
if datalist[current] < datalist[current-gap]:
datalist[current],datalist[current-gap] = datalist[current-gap],datalist[current]
current-=gap
#取新的gap
gap=gap//2
datalist=[12,23,21,1,2,7,4,9,234,21,21,56]
shellsort(datalist)
print(str(datalist))
資料結構 資料結構與演算法01
1 求一組整數中的最大值。演算法 基本操作是 比較兩個數的大小 模型 仔細想想 你並不知道這個整數到底是多大?整數過大你該怎麼去表示?2 足協的資料庫管理的程式 演算法 需要管理的專案?如何管理?使用者介面?模型 3 資料與資料結構 資料 所有能被輸入到計算機中,並被計算機處理的符號的集合計算機操作...
資料結構與演算法 01 如何學習資料結構與演算法
過於學術的概念定義比較抽象,難以理解。我們從廣義和狹義兩個層面,來理解資料結構與演算法這兩個概念。從廣義上講,資料結構就是指一組資料的儲存結構 怎麼放 演算法就是運算元據的一組方法 怎麼用 我們以圖書館的場景為例來進一步理解 圖書館書籍量十分巨大,首先要分類設定閱覽室,譬如社科類 科技類 報刊類等。...
python資料結構與演算法 day01
1 演算法的概念 演算法是計算機處理資訊的本質,因為電腦程式本質上是乙個演算法來告訴計算機確切的步驟來執行乙個指定的任務。一般地,當演算法在處理資訊時,會從輸入裝置或資料的儲存位址讀取資料,把結果寫入輸出裝置或某個儲存位址供以後再呼叫。對於演算法而言,實現的語言並不重要,重要的是思想。2 演算法的五...