聽了九章大神的歸併排序,手寫

2021-08-21 13:01:35 字數 1306 閱讀 4900

#本程式用於對乙個陣列進行合併(merge)排序,這個陣列滿足:

1,可以從中間分成兩半部分;

2,兩部分各自本來就是有序的。

本程式是歸併排序演算法的一部分。效果是實現了從小到大排列。本程式時間複雜度o(n),n為待排序陣列長度 

#本程式用於對乙個陣列進行合併(merge)排序,這個陣列滿足:1,可以從中間分成兩半部分;2,兩部分各自本來就是有序的。本程式是歸併排序演算法的一部分。效果是實現了從小到大排列。本程式時間複雜度o(n),n為待排序陣列長度

def mergesort(a=):#定義乙個輸入變數為陣列的python函式

mid = int((len(a)-1)/2)#定位中間點

temp = [0 for x in range(0,len(a))]#開闢乙個等長的空的臨時陣列,用於臨時存放比較結果

k=0i = 0 #先定位好左半部分開始指標

j = mid+1#再定位好右半部分開始指標

while k < len(a):

if i <=mid and j <= len(a)-1:#當左半部分沒有迴圈結束且右半部分也沒有迴圈結束時

#print("i=",i,"j=",j,"k=",k)#多處print注釋是因為一開始寫錯了,除錯了很久orz

if a[i]",i)

else:#如果左半部分指標指向的數大於等於右半部分指標指向的數,

temp[k]=a[j]#則臨時陣列先放右半部分的數

#print("temp[k]=",temp[k])

j += 1#右半部分指標右移一位,繼續跟左半部分比較

#print("j->",j)

elif i>mid:#當左半部分先迴圈結束時

temp[k]=a[j]#剩下的右半部分直接放到臨時陣列

#print("temp[k]=",temp[k])

j += 1#右半部分指標繼續右移

#print("j->",j)

else:#當右半部分先迴圈結束時

temp[k]=a[i]#剩下的左半部分直接放到臨時陣列

#print("temp[k]=",temp[k])

i+= 1#左半部分指標繼續右移

#print("i->",i)

k += 1#完成一輪比較,臨時陣列指標右移一位

#print("k->",k)

m=0while ma[m]=temp[m]

m += 1

array =[1,4,6,2,3,8]

mergesort(array)#呼叫函式

print(array)

第九章 關公的臉譜

1.紅臉關公的由來 關公的臉譜 石可破也,而不可奪堅 丹可磨也,而不可奪赤。堅與赤,性之有也。性也者,所受於天也,非擇取而為之也。豪士之自好者,其不可漫以汙也,亦猶此也。呂氏春秋 話說曹操煮酒論英雄之時,忽然驚雷暴雨,關羽 張飛惦記著劉備,急忙送傘過來。曹操看到關羽,眼前頓時一亮,笑著對劉備說 我剛...

第九章 類的重用

一 什麼是繼承?1 繼承是類與類間的關係。2 是一種什麼 是 什麼的關係。3 繼承功能就是用來解決 重用的問題。1 繼承 是一種建立新類的方式,python中,1 新建的類可以繼承乙個或多個父類。2 父類可以成為基類或超類。3 所新建的類稱為子類或派生類。2 類繼承的數量 python中類的繼承分為...

第九章 做決定的時刻

2.影響自我完整性的決定 3.重大決定 三種型別的要求 1 無關緊要的要求 2 牽扯到重要的問題,中度 3 重要的決定,一旦讓步,就是傷害。請注意 雖然是無關緊要的決定,但是不要有自動的行為模式。而是應該審視對方的要求,尤其是呈現方式,放在大環境下進行分析。批判性地思考問題所在 1 我們之間固定的相...