python归并算法
生活随笔
收集整理的這篇文章主要介紹了
python归并算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
歸并排序首先進行的是對序列拆分。
先把代碼看成已經執行到最后一步,左部分和右部分都是排序好的,然后把他們的左部分和右部分再排序,剩下的幾次排序可以采用嵌套遞歸來實現。
代碼如下:
#歸并排序 def merge_sort(alist):n=len(alist)if n<=1: #如果只有一個元素的話就不能再往下拆分了,直接返回return alist #不斷歸并到最后一個列表只有一個元素,把自身返回即可。mid=n//2 #中間位置下標#left 采用歸并排序后形成的新的有序的新的列表left_li=merge_sort(alist[:mid]) #左部分列表,調用自身#right 采用歸并排序后形成的新的有序的新的列表right_li=merge_sort(alist[mid:]) #右部分列表,調用自身#這個時候返回的左部分是經過多次遞歸后形成的一個有序的左部分,右部分也是一樣#這個時候就要把左右兩部分進行合并,將兩個有序的子序列合并成一個新的整體。#merge(left,right)#接下來是合并left_pointer,right_pointer=0,0 #left_pointer和right_pointer剛開始都應該指向第一個元素result=[] #建立新的列表來存放合并的結果值while left_pointer<len(left_li) and right_pointer<len(right_li): #當兩個指針都沒有走到頭的時候執行判斷大小,并選擇小的加入result列表代碼if left_li[left_pointer] <=right_li[right_pointer]: #這里加等號是為了確保代碼的穩定性result.append(left_li[left_pointer])left_pointer+=1else:result.append(right_li[right_pointer])right_pointer+=1#當一邊游標到頭另一邊的游標還沒有到頭的時候,把剩下的追加上,到頭的追加空列表,沒到頭的把剩下的全部追加上result+=left_li[left_pointer:]result+=right_li[right_pointer:]#到這里排序的新列表制作完成return result #把新生成的列表返回if __name__ == '__main__':alist = [54, 26, 93, 17, 77, 31, 44, 55,20]print(alist)sorted=merge_sort(alist)print(sorted)總結
以上是生活随笔為你收集整理的python归并算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 登录注册代码
- 下一篇: python字典基础知识点