12 謝爾排序

2022-05-07 02:24:10 字數 929 閱讀 8066

# 我們注意到插入排序的比對次數,在最好的情況下是o(n),這種情況發生在列表已是有序的情況下,

# 實際上,列表越接近有序,插入排序的比對次數就越少

# 從這個情況入手,謝爾排序以插入排序作為基礎,對無序表進行間隔劃分子列表,每個子列表都執行插入排序

# 子列表的間隔一般從n/2開始,每趟倍增:n/4, n/8......直到1

# 謝爾排序的時間複雜度約為o(n**1.5)

def gapinsertionsort(alist, start, gap):

for i in range(start+gap, len(alist), gap):

currentvalue = alist[i]

position = i

while position >= gap and alist[position-gap] > currentvalue:

alist[position] = alist[position-gap]

position = position - gap

alist[position] = currentvalue

def shellsort(alist):

sublistcount = len(alist) // 2

while sublistcount > 0:

for startposition in range(sublistcount):

gapinsertionsort(alist, startposition, sublistcount)

sublistcount = sublistcount // 2

testlist = [2, 3, 3, 243, 24, 24455, 23]

shellsort(testlist)

print(testlist)

拓撲排序(謝慶皇)

求 同樣以上圖為例,對於該圖進行拓撲排序會得到 v1 v2 v5 v4 v3 v7 v6 或者v1 v2 v5 v4 v7 v3 v6 仍然利用上一貼圖的構建方法,進行驗證。實現 助編輯百科名片 拓撲排序 目錄拓撲排序 什麼是拓撲序列 實現的基本方法 在計算機語言中的應用 拓撲序列 pascal 拓...

混沌分形之謝爾賓斯基(Sierpinski)

本文以使用混沌方法生成若干種謝爾賓斯基相關的分形圖形。1 謝爾賓斯基三角形 給三角形的3個頂點,和乙個當前點,然後以以下的方式進行迭代處理 a.隨機選擇三角形的某乙個頂點,計算出它與當前點的中點位置 b.將計算出的中點做為當前點,再重新執行操作a class sierpinski public fr...

混沌分形之謝爾賓斯基(Sierpinski)

本文以使用混沌方法生成若干種謝爾賓斯基相關的分形圖形。1 謝爾賓斯基三角形 給三角形的3個頂點,和乙個當前點,然後以以下的方式進行迭代處理 a.隨機選擇三角形的某乙個頂點,計算出它與當前點的中點位置 b.將計算出的中點做為當前點,再重新執行操作a class sierpinski public fr...