<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Python編程中歸并排序算法的實現步驟詳解

        來源:懂視網 責編:小采 時間:2020-11-27 14:36:48
        文檔

        Python編程中歸并排序算法的實現步驟詳解

        Python編程中歸并排序算法的實現步驟詳解:基本思想:歸并排序是一種典型的分治思想,把一個無序列表一分為二,對每個子序列再一分為二,繼續下去,直到無法再進行劃分為止。然后,就開始合并的過程,對每個子序列和另外一個子序列的元素進行比較,依次把小元素放入結果序列中進行合并,最終完成歸并排
        推薦度:
        導讀Python編程中歸并排序算法的實現步驟詳解:基本思想:歸并排序是一種典型的分治思想,把一個無序列表一分為二,對每個子序列再一分為二,繼續下去,直到無法再進行劃分為止。然后,就開始合并的過程,對每個子序列和另外一個子序列的元素進行比較,依次把小元素放入結果序列中進行合并,最終完成歸并排

        基本思想:歸并排序是一種典型的分治思想,把一個無序列表一分為二,對每個子序列再一分為二,繼續下去,直到無法再進行劃分為止。然后,就開始合并的過程,對每個子序列和另外一個子序列的元素進行比較,依次把小元素放入結果序列中進行合并,最終完成歸并排序。
        歸并操作過程:

        申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合并后的序列
        設定兩個指針,最初位置分別為兩個已經排序序列的起始位置
        比較兩個指針所指向的元素,選擇相對小的元素放入到合并空間,并移動指針到下一位置
        重復步驟3直到某一指針達到序列尾
        將另一序列剩下的所有元素直接復制到合并序列尾
        上述說法是理論表述,下面用一個實際例子說明:

        例如一個無序數組

        [6,2,3,1,7]
        

        首先將這個數組通過遞歸方式進行分解,直到:

        [6],[2],[3],[1],[7]
        

        然后開始合并排序,也是用遞歸的方式進行:

        兩個兩個合并排序,得到:

        [2,6],[1,3],[7]
        

        上一步中,其實也是按照本步驟的方式合并的,只不過由于每個list中一個數,不能完全顯示過程。下面則可以完全顯示過程。

        初始:

         a = [2,6] b = [1,3] c = [] 

        第1步,順序從a,b中取出一個數字:2,1 比較大小后放入c中,并將該數字從原list中刪除,結果是:

        a = [2,6] b = [3] c = [1] 

        第2步,繼續從a,b中按照順序取出數字,也就是重復上面步驟,這次是:2,3 比較大小后放入c中,并將該數字從原list中刪除,結果是:

        a = [6] b = [3] c = [1,2] 

        第3步,再重復前邊的步驟,結果是:

        a = [6] b = [] c = [1,2,3] 

        最后一步,將6追加到c中,結果形成了:

        a = [] b = [] c = [1,2,3,6]
        

        通過反復應用上面的流程,實現[1,2,3,6]與[7]的合并

        最終得到排序結果

        [1,2,3,6,7]
        

        本文列舉了三種python的實現方法:

        方法1:將前面講述的過程翻譯過來了,略先拙笨

        #! /usr/bin/env python
        #coding:utf-8
        
        def merge_sort(seq):
         if len(seq) ==1:
         return seq
         else:
         middle = len(seq)/2
         left = merge_sort(seq[:middle])
         right = merge_sort(seq[middle:])
        
         i = 0 #left 計數
         j = 0 #right 計數
         k = 0 #總計數
        
         while i < len(left) and j < len(right):
         if left[i] < right [j]:
         seq[k] = left[i]
         i +=1
         k +=1
         else:
         seq[k] = right[j]
         j +=1
         k +=1
        
         remain = left if i

        方法2:在按照順序取數值方面,應用了list.pop()方法,代碼更緊湊簡潔

        #! /usr/bin/env python
        #coding:utf-8
        
        
        def merge_sort(lst): #此方法來自維基百科
        
         if len(lst) <= 1:
         return lst
        
         def merge(left, right):
         merged = []
        
         while left and right:
         merged.append(left.pop(0) if left[0] <= right[0] else right.pop(0))
        
         while left:
         merged.append(left.pop(0))
        
         while right:
         merged.append(right.pop(0))
        
         return merged
        
         middle = int(len(lst) / 2) 
         left = merge_sort(lst[:middle])
         right = merge_sort(lst[middle:])
         return merge(left, right)
        
        

        方法3:原來在python的模塊heapq中就提供了歸并排序的方法,只要將分解后的結果導入該方法即可。

        #! /usr/bin/env python
        #coding:utf-8
        
        
        from heapq import merge
        
        def merge_sort(seq):
         if len(seq) <= 1:
         return m
         else: 
         middle = len(seq)/2
         left = merge_sort(seq[:middle])
         right = merge_sort(seq[middle:])
         return list(merge(left, right)) #heapq.merge()
        
        if __name__=="__main__":
         seq = [1,3,6,2,4]
         print merge_sort(seq)
        

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Python編程中歸并排序算法的實現步驟詳解

        Python編程中歸并排序算法的實現步驟詳解:基本思想:歸并排序是一種典型的分治思想,把一個無序列表一分為二,對每個子序列再一分為二,繼續下去,直到無法再進行劃分為止。然后,就開始合并的過程,對每個子序列和另外一個子序列的元素進行比較,依次把小元素放入結果序列中進行合并,最終完成歸并排
        推薦度:
        標簽: 方法 講解 合并
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲国产超清无码专区| 亚洲一区二区电影| 亚洲精品无码av片| 成人人观看的免费毛片| 亚洲熟女综合色一区二区三区| 日本XXX黄区免费看| 亚洲性线免费观看视频成熟| 免费av欧美国产在钱| 亚洲精品无码永久在线观看男男| 午夜毛片不卡免费观看视频| 欧美色欧美亚洲另类二区| 亚洲毛片av日韩av无码| 最近免费字幕中文大全| 久久av无码专区亚洲av桃花岛| 国产成人免费在线| 亚洲色欲色欱wwW在线| 免费大学生国产在线观看p| 一级做a毛片免费视频| 久久精品国产精品亚洲艾草网| 2021在线永久免费视频| 亚洲国产精品无码中文lv| 四虎1515hm免费国产| 中国黄色免费网站| 亚洲综合无码一区二区三区| 思思99re66在线精品免费观看| 羞羞视频免费网站含羞草| 亚洲精品乱码久久久久久按摩 | jjizz全部免费看片| 亚洲日本一线产区和二线 | 久久大香伊焦在人线免费| 亚洲人成网网址在线看| 免费又黄又硬又爽大片| 无码囯产精品一区二区免费 | 国产视频精品免费| a级成人免费毛片完整版| 国产精品亚洲专区在线观看| 亚洲国产婷婷香蕉久久久久久| 99热精品在线免费观看| 久久精品国产亚洲av品善| 国产AV无码专区亚洲AV毛网站| 91嫩草国产在线观看免费|