日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

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

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