<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人片高潮喷水| 国产zzjjzzjj视频全免费| 青青免费在线视频| 亚洲欧洲自拍拍偷精品 美利坚| 亚洲国产精品自在在线观看| 亚洲av永久中文无码精品综合| 全免费一级午夜毛片| jzzijzzij在线观看亚洲熟妇| 久久青草精品38国产免费| 亚洲av永久无码精品古装片| 久久亚洲免费视频| 亚洲综合无码一区二区痴汉| 免费看大美女大黄大色| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 亚洲色爱图小说专区| 日本亚洲欧洲免费天堂午夜看片女人员| 国产亚洲精品一品区99热| 亚洲精品视频免费在线观看| 亚洲情A成黄在线观看动漫软件| 国产成人涩涩涩视频在线观看免费 | 无码乱人伦一区二区亚洲一| 91成年人免费视频| 美女视频黄频a免费观看| 亚洲精品成人片在线播放 | 国产免费人视频在线观看免费| 国产精品免费视频观看拍拍| 久久99国产亚洲精品观看| 97在线线免费观看视频在线观看| 国产成人亚洲精品电影| 亚洲爆乳无码一区二区三区| 男女猛烈xx00免费视频试看| 狠狠色伊人亚洲综合成人| 国产乱码免费卡1卡二卡3卡| 成年大片免费高清在线看黄| 亚洲人成电影福利在线播放| 国产大片线上免费看| 无码国产精品一区二区免费模式|