日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python归并算法

發布時間:2024/1/23 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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归并算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。