python編程實(shí)現(xiàn)歸并排序
因?yàn)樯蟼€(gè)星期leetcode的一道題(Median of Two Sorted Arrays)所以想仔細(xì)了解一下歸并排序的實(shí)現(xiàn)。
還是先闡述一下排序思路:
首先歸并排序使用了二分法,歸根到底的思想還是分而治之。拿到一個(gè)長(zhǎng)數(shù)組,將其不停的分為左邊和右邊兩份,然后以此遞歸分下去。然后再將她們按照兩個(gè)有序數(shù)組的樣子合并起來(lái)。這樣說(shuō)起來(lái)可能很難理解,于是給出一張我畫的圖。

這里顯示了歸并排序的第一步,將數(shù)組按照middle進(jìn)行遞歸拆分,最后分到最細(xì)之后再將其使用對(duì)兩個(gè)有序數(shù)組進(jìn)行排序的方法對(duì)其進(jìn)行排序。
兩個(gè)有序數(shù)組排序的方法則非常簡(jiǎn)單,同時(shí)對(duì)兩個(gè)數(shù)組的第一個(gè)位置進(jìn)行比大小,將小的放入一個(gè)空數(shù)組,然后被放入空數(shù)組的那個(gè)位置的指針往后 移一個(gè),然后繼續(xù)和另外一個(gè)數(shù)組的上一個(gè)位置進(jìn)行比較,以此類推。到最后任何一個(gè)數(shù)組先出棧完,就將另外i一個(gè)數(shù)組里的所有元素追加到新數(shù)組后面。
由于遞歸拆分的時(shí)間復(fù)雜度是logN 然而,進(jìn)行兩個(gè)有序數(shù)組排序的方法復(fù)雜度是N該算法的時(shí)間復(fù)雜度是N*logN 所以是NlogN。
根據(jù)這波分析,我們可以看看對(duì)上圖的一個(gè)行為。
當(dāng)最左邊的分到最細(xì)之后無(wú)法再劃分左右然后開始進(jìn)行合并。
第一次組合完成[4, 7]的合并
第二次組合完成[4, 7, 8]的合并
第三次組合完成[3, 5]的合并
第四次組合完成[3, 5, 9]的合并
第五次組合完成[3, 4, 5, 7, 8, 9]的合并結(jié)束排序。
下面放上python的代碼
def merge(a, b): c = [] h = j = 0 while j < len(a) and h < len(b): if a[j] < b[h]: c.append(a[j]) j += 1 else: c.append(b[h]) h += 1 if j == len(a): for i in b[h:]: c.append(i) else: for i in a[j:]: c.append(i) return c def merge_sort(lists): if len(lists) <= 1: return lists middle = len(lists)/2 left = merge_sort(lists[:middle]) right = merge_sort(lists[middle:]) return merge(left, right) if __name__ == '__main__': a = [4, 7, 8, 3, 5, 9] print merge_sort(a)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python 實(shí)現(xiàn)歸并排序算法
- Python編程中歸并排序算法的實(shí)現(xiàn)步驟詳解
- python實(shí)現(xiàn)歸并排序算法
- Python實(shí)現(xiàn)的歸并排序算法示例
- python實(shí)現(xiàn)折半查找和歸并排序算法
- Python排序搜索基本算法之歸并排序?qū)嵗治?/a>
- 10個(gè)python3常用排序算法詳細(xì)說(shuō)明與實(shí)例(快速排序,冒泡排序,桶排序,基數(shù)排序,堆排序,希爾排序,歸并排序,計(jì)數(shù)排序)
- golang/python實(shí)現(xiàn)歸并排序?qū)嵗a
- python基本算法之實(shí)現(xiàn)歸并排序(Merge sort)
相關(guān)文章
Python中使用gzip模塊壓縮文件的簡(jiǎn)單教程
這篇文章主要介紹了Python中使用gzip模塊壓縮文件的簡(jiǎn)單教程,本文的例子主要針對(duì)類UNIXZ系統(tǒng),需要的朋友可以參考下2015-04-04
Python代碼實(shí)現(xiàn)列表分組計(jì)數(shù)
這篇文章主要介紹了Python代碼實(shí)現(xiàn)列表分組計(jì)數(shù),利用Python代碼實(shí)現(xiàn)了使用分組函數(shù)對(duì)列表進(jìn)行分組,并計(jì)算每組的元素個(gè)數(shù)的功能,需要的朋友可以參考一下2021-11-11
基于Python和MoviePy實(shí)現(xiàn)照片管理和視頻合成工具
在這篇博客中,我們將詳細(xì)剖析一個(gè)基于 Python 的圖形界面應(yīng)用程序,該程序使用 wxPython 構(gòu)建用戶界面,并結(jié)合 MoviePy、Pillow 和 OpenCV 等庫(kù)實(shí)現(xiàn)照片管理和視頻合成功能,通過(guò)對(duì)代碼的逐部分分析,需要的朋友可以參考下2025-04-04
OpenCV每日函數(shù)之BarcodeDetector類條碼檢測(cè)器
OpenCV在V4.5.3版本的contrib包中提供了一個(gè)barcode::BarcodeDetector類,用于條形碼的識(shí)別,這篇文章主要介紹了OpenCV每日函數(shù)?BarcodeDetector條碼檢測(cè)器,需要的朋友可以參考下2022-06-06
Python中POST調(diào)用Restful接口示例
這篇文章主要介紹了Python之POST調(diào)用Restful接口示例,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02

