大二開學開始讀演算法導論同時又在自學python,想把一些厲害的演算法都用python自己寫一遍
以下是分治排序的python實現
隨機產生一萬個1000以內的數字然後排序
設想有兩副排序好的撲克牌將他們合併成排序好的一副牌總數為n,只需要將牌頂的派比較然後根據從大到小或者從小到大放到手中即可,這樣就把問題變成了如何將n/2張牌排序,最後將一副牌分成n個小份,複雜程度以對數計,相比氣泡排序以指數計變好了很多
(分治排序0.5秒完成 氣泡排序7.2秒完成)
import random
defmerge_sort
(a):
if len(a)==1:
return a;
b=c=
d=for x in range(0,len(a)//2):
pass
for x in range(len(a)//2,len(a)):
pass
b=merge_sort(b)
c=merge_sort(c)
i=0j=0
for k in range(0,len(a)):
if b[i]<=c[j]:
i+=1
else:
j+=1
return d;
a=for x in range(0,10000):
print(a[x],end="* *")
pass
a=merge_sort(a)
for x in a:
print (x,end=" ")
才疏學淺,寫的不好,請大家多多指教 分治排序演算法的python實現
時間複雜度o nlgn 分治模式的一般步驟 分解 divide 將原問題分解成一些列子問題 解決 conquer 遞迴地解各子問題,若子問題足夠小,則直接求解 合併 combine 將子問題的結果合併成原問題的解。以下是分治排序的python實現 def merge p list,p start,p...
分治演算法(排序的實現)
分治排序演算法中能夠使兩個已經排好序的陣列重新以從小到大的順序進行排序,實現上述功能 需要用到兩個函式1.合併 merge 函式,將兩個有序陣列合併成乙個陣列 2.分治排序函式 但是如果乙個陣列中是排序是無序的怎麼實現分治排序,此時就要用到分治演算法的思想 遞迴 通過遞迴將無序的陣列分隔 當分隔的陣...
分治法實現歸併排序演算法(python實現)
給定任意幾組資料,利用分治法的思想,將資料進行排序並將排好的資料進行輸出。利用分治法,將乙個陣列元素大於 2 的陣列分成兩個子陣列,然後對每乙個子陣列遞迴呼叫,直到最下的子陣列的元素個數為 1,此時子陣列就不用進行排序了,再往上回溯,依據每個子陣列中的元素大小對子陣列進行合併,依次進行下去,最後返回...