python資料結構與演算法——歸併排序

來源:互聯網
上載者:User

標籤:

歸併排序:

原理與C語言實現

參考:白話經典演算法系列之五 歸併排序的實現

1. 容易對有序數組A,B進行排序。

2. 為了使得A,B組內資料有序:可以將A,B組各自再分成二組。

3. 經過不斷分組,當分出來的小組只有一個資料時(有序),合并相鄰二個小組。

這樣通過先遞迴的分解數列,再合并數列就完成了歸併排序

 

代碼摘自《Python Algorithm》

 1 # 對數組seq進行歸併排序 2 # 返回排序後數組 3 def mergesort(seq): 4     mid = len(seq)//2 5     lft, rgt = seq[:mid], seq[mid:] 6     if len(lft) > 1: lft = mergesort(lft)       # 對數組的一半進行排序 7     if len(rgt) > 1: rgt = mergesort(rgt) 8  9     res = []10     # lft,rgt 均按遞增排列11     while lft and rgt:                          # 左右數組均不為空白 12         if lft[-1] >= rgt[-1]:                  # 找出兩個數組中最大的元素13             res.append(lft.pop())               # 放入結果數組中,並將原數組元素刪除14         else:15             res.append(rgt.pop())               # 如果用pop(0)則下面的res不用反轉,但是pop(0)時間慢16                                                 # 而res相對較快17     # res開始時為一個遞減數組,將其反轉使之遞增18     res.reverse()19     return (lft or rgt) + res                   # 將餘下的有序數組拼接到res前20 21 seq = [1,2,4,6,3,7,5,9,0,5,7]22 print mergesort(seq)

 

python資料結構與演算法——歸併排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.