最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python編程實(shí)現(xiàn)歸并排序

 更新時(shí)間:2017年04月14日 09:23:30   作者:piperck  
這篇文章主要為大家詳細(xì)介紹了python編程實(shí)現(xiàn)歸并排序的具體代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

因?yàn)樯蟼€(gè)星期leetcode的一道題(Median of Two Sorted Arrays)所以想仔細(xì)了解一下歸并排序的實(shí)現(xiàn)。

還是先闡述一下排序思路:

首先歸并排序使用了二分法,歸根到底的思想還是分而治之。拿到一個(gè)長(zhǎng)數(shù)組,將其不停的分為左邊和右邊兩份,然后以此遞歸分下去。然后再將她們按照兩個(gè)有序數(shù)組的樣子合并起來。這樣說起來可能很難理解,于是給出一張我畫的圖。

這里顯示了歸并排序的第一步,將數(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ì)之后無法再劃分左右然后開始進(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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python3 pandas 操作列表實(shí)例詳解

    Python3 pandas 操作列表實(shí)例詳解

    這篇文章主要介紹了Python3 pandas 操作列表實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 通過底層源碼理解YOLOv5的Backbone

    通過底層源碼理解YOLOv5的Backbone

    yolov5的特征提取網(wǎng)絡(luò)兼顧速度與精度,將PAN與PFN深度融合,對(duì)不同尺度魯棒性強(qiáng),可以即插即用,后接不同的檢測(cè)器,下面這篇文章主要給大家介紹了關(guān)于如何通過底層源碼理解YOLOv5的Backbone的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Python中使用gzip模塊壓縮文件的簡(jiǎn)單教程

    Python中使用gzip模塊壓縮文件的簡(jiǎn)單教程

    這篇文章主要介紹了Python中使用gzip模塊壓縮文件的簡(jiǎn)單教程,本文的例子主要針對(duì)類UNIXZ系統(tǒng),需要的朋友可以參考下
    2015-04-04
  • Python腳本導(dǎo)出為exe程序的方法

    Python腳本導(dǎo)出為exe程序的方法

    這篇文章主要介紹了如何把Python腳本導(dǎo)出為exe程序的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • python 分離文件名和路徑以及分離文件名和后綴的方法

    python 分離文件名和路徑以及分離文件名和后綴的方法

    今天小編就為大家分享一篇python 分離文件名和路徑以及分離文件名和后綴的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python代碼實(shí)現(xiàn)列表分組計(jì)數(shù)

    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捕獲警告的三種方法

    python捕獲警告的三種方法

    這篇文章主要介紹了python捕獲警告的三種方法,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • 基于Python和MoviePy實(shí)現(xiàn)照片管理和視頻合成工具

    基于Python和MoviePy實(shí)現(xiàn)照片管理和視頻合成工具

    在這篇博客中,我們將詳細(xì)剖析一個(gè)基于 Python 的圖形界面應(yīng)用程序,該程序使用 wxPython 構(gòu)建用戶界面,并結(jié)合 MoviePy、Pillow 和 OpenCV 等庫(kù)實(shí)現(xiàn)照片管理和視頻合成功能,通過對(duì)代碼的逐部分分析,需要的朋友可以參考下
    2025-04-04
  • OpenCV每日函數(shù)之BarcodeDetector類條碼檢測(cè)器

    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接口示例

    這篇文章主要介紹了Python之POST調(diào)用Restful接口示例,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02

最新評(píng)論

汨罗市| 高台县| 泽库县| 石林| 晋江市| 青河县| 屯留县| 小金县| 陕西省| 靖远县| 旅游| 固安县| 乐亭县| 五峰| 高台县| 博罗县| 灵川县| 海阳市| 余干县| 五常市| 中宁县| 怀柔区| 雅江县| 全州县| 兴安盟| 大厂| 筠连县| 新余市| 宝清县| 沧源| 永泰县| 阿图什市| 墨脱县| 昌乐县| 绿春县| 玛纳斯县| 商水县| 巨鹿县| 岑巩县| 通化县| 自治县|