python實現歸併排序

2021-06-22 11:09:30 字數 1923 閱讀 5015

#歸併排序,先把陣列按中間分為2個單元,直至每個單元僅包含1個元素,然後依次合併2個單元至一臨時陣列

def merge(str,start_index,end_index,mid,temp):

j=start_index

k=mid+1

i=0while j<=mid and k<=end_index:

if str[j]temp[i]=str[j]   #小的放前面

j+=1

else:

temp[i]=str[k]

k+=1

i+=1

while j<=mid:

temp[i]=str[j]

j+=1

i+=1

while k<=end_index:

temp[i]=str[k]

k+=1

i+=1

for s in range(0,i):

str[start_index+s]=temp[s]

def mergesort(str,start_index,end_index,temp):

if start_indexmid=(start_index+end_index)//2

mergesort(str,start_index,mid,temp)

mergesort(str,mid+1,end_index,temp)

merge(str,start_index,end_index,mid,temp)

def merge1(str,start_index,end_index,mid):

j=start_index

k=mid+1

i=0temp=[d for d in range(len(str))]

while j<=mid and k<=end_index:

if str[j]temp[i]=str[j]

j+=1

else:

temp[i]=str[k]

k+=1

i+=1

while j<=mid:

temp[i]=str[j]

j+=1

i+=1

while k<=end_index:

temp[i]=str[k]

k+=1

i+=1

for s in range(0,i):

str[start_index+s]=temp[s]

def mergesort1(str,start_index,end_index):

if start_indexmid=(start_index+end_index)//2

mergesort1(str,start_index,mid)

mergesort1(str,mid+1,end_index)

merge1(str,start_index,end_index,mid)

str=[49,27,49,3,38,1,13,76,97,65]

temp=[d for d in range(len(str))]

begintime=time.clock()

mergesort(str,0,len(str)-1,temp)

endtime=time.clock()

print("歸併排序 臨時陣列遞迴前初始化好")

print(str)

print(endtime-begintime)

str=[49,27,49,3,38,1,13,76,97,65]

begintime=time.clock()

mergesort1(str,0,len(str)-1)

endtime=time.clock()

print("歸併排序1 臨時陣列在merge時建立")

print(str)

print(endtime-begintime)

Python實現歸併排序

def mergesort seq if len seq 1 return seq else mid int len seq 2 lpart mergesort seq mid rpart mergesort seq mid return merge lpart,rpart defmerge lpa...

Python實現歸併排序

歸併排序是典型的分治法的應用 思想 先遞迴分解陣列,再合併陣列 原理 將陣列分解最小之後,然後合併兩個有序陣列,基本思想是比較兩個陣列的最前面的數,誰小就取誰,取完後,將相應的指標後移以為。然後再比較,直到乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。python 實現 歸併排序 def m...

歸併排序python實現

歸併排序在於把序列拆分再合併起來,使用分治法來實現,這就意味這要構造遞迴演算法 首先是乙個例子 原序先通過一半一半的拆分,然後 然後再一步一步的向上合併,在合併的過程中完成了排序,合併排序演算法如下 def merge s1,s2,s 將兩個列表是s1,s2按順序融合為乙個列表s,s為原列表 j和i...