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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python归并排序理解不了_一日一技:如何更好地理解归并排序?

發布時間:2023/12/15 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python归并排序理解不了_一日一技:如何更好地理解归并排序? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一日一技:如何更好地理解歸并排序?

攝影:產品經理

廚師:kingname

請確保你已經看了我昨天的公眾號文章。昨天的內容是今天的基礎。

一日一技:在 Python 里面如何合并多個有序列表并使得結果依然有序?

在昨天的文章里面,我們已經知道,可以使用 heapq.merge把兩個有序列表合并成新的有序列表。

現在,我們來設計一個排序算法,對列表:[1,4,2,0,4,5,1,-3,-8,188,34] 進行排序。

我們現在先把列表拆分成a列表:[1,4,2,0,4,5]和b列表 [1,-3,-8,188,34]。如果我們能夠分別讓這兩個列表各自有序,然后應用昨天的方法,合并一下,最終結果自然就出來了。

那么如何讓這兩個列表各自有序呢?我們以 [1,4,2,0,4,5]為例。繼續把它拆分為兩個列表 [1,4,2]和 [0,4,5]。只要這兩個列表各自有序,那么合并一下就行了。

我們再來看 [1,4,2],如何讓它有序呢?我們繼續分成兩個列表 [1]和 [4,2]。顯然只有一個元素的列表 [1]是有序的。

再來看 [4,2],繼續分成兩個列表 [4]和 [2]。這兩個列表都只有一個元素,所以他們都是有序的。此時對他們進行合并,得到 [2,4]。

[1] 與 [2,4]合并,得到 [1,2,4]。

[1,2,4]與 [0,4,5]合并,得到 [0,1,2,4,4,5]。

[0,1,2,4,4,5]與 [-8,-3,1,34,188]合并,得到 [-8,-3,0,1,1,2,4,4,5,34,188]。

排序完成。

整個過程先拆分再合并,這種排序算法叫做 歸并算法。它的時間復雜度始終是 O(nlogn)。而我們常常聽說的快速排序,只有在最好的情況下時間復雜度才能達到 O(nlogn)。所以歸并排序在時間復雜度這個角度是優于快速排序的。

那么如何使用代碼來實現呢?合并的部分請看昨天的文章,今天我們主要描述拆分的邏輯:

import heapq

def sort(target):

if not target:

return []

if len(target) == 1:

return target

left = target[:len(target) // 2]

right = target[len(target)//2 :]

sorted_left = sort(left)

sorted_right = sort(right)

result = heapq.merge(sorted_left, sorted_right)

return result

運行效果如下圖所示:

總結

以上是生活随笔為你收集整理的python归并排序理解不了_一日一技:如何更好地理解归并排序?的全部內容,希望文章能夠幫你解決所遇到的問題。

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