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

歡迎訪問 生活随笔!

生活随笔

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

python

python归并排序 分词_python-归并排序

發布時間:2025/4/16 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python归并排序 分词_python-归并排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼環境:python3.6

歸并排序采用分治法,思想是:先遞歸拆分數組,再合并數組。

1、拆分數組

假設數組一共有 n 個元素,我們遞歸對數組進行折半拆分即n//2,直到每組只有一個元素為止。

2、合并數組

算法會從最小數組開始有序合并,這樣合并出來的數組一直是有序的,所以合并兩個有序數組是歸并算法的核心,這里用兩個簡單數組示例:

步驟1:新建一個空數組存放合并結果,用l和r兩個輔助指針記錄兩個數組當前操作位置;

步驟2:從左到右逐一比較兩個小數組中的元素,較小的元素先放入新數組,指針移位,直到l或r指針超出尾部;

步驟3:指針尚未移到尾部的數組,說明還有剩余元素,將剩余元素合并到新數組尾部。

算法實現

def merge(list_left, list_right):

"""

入參數組都是有序的,此處將兩個有序數組合并成一個大的有序數組

"""

# 兩個數組的起始下標

l, r = 0, 0

new_list = []

while l < len(list_left) and r < len(list_right):

if list_left[l] < list_right[r]:

new_list.append(list_left[l])

l += 1

else:

new_list.append(list_right[r])

r += 1

new_list += list_left[l:]

new_list += list_right[r:]

return new_list

def merge_sort(mylist):

"""歸并排序

mylist: 待排序數組

return: 新數組list

"""

if len(mylist) <= 1:

return mylist

mid = len(mylist) // 2

list_left = merge_sort(mylist[:mid])

list_right = merge_sort(mylist[mid:])

return merge(list_left, list_right)

if __name__ == "__main__":

mylist = [12, 33, 199, 0, 54, 33, 11]

result = merge_sort(mylist)

print(f'歸并排序后:{result}')

算法效率

時間復雜度:O(nlogn)

歸并排序把數組一層層折半分組,長度為 n 的數組,折半層數就是 logn,每一層進行操作的運算量是 n,得出時間復雜度 O(nlogn)。

空間復雜度:O(n)

每次歸并操作需要創建額外的新數組,占用空間為 n,但這部分額外空間會隨著方法的結束而釋放,所以只需要算單次歸并操作開辟的空間即可,得出空間復雜度 O(n)。

穩定性:穩定

從算法中從左到右逐一比較,較小的先放入新數組,所以兩個值相同的元素,排序后依然保持原先后順序。

非原地排序

總結

以上是生活随笔為你收集整理的python归并排序 分词_python-归并排序的全部內容,希望文章能夠幫你解決所遇到的問題。

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