經典排序算法python回顧之五 歸併排序

歸併操做

簡介

歸併操做(merge),也叫歸併算法,指的是將兩個已經排序的序列合併成一個序列的操做。歸併排序算法依賴歸併操做。 python

歸併操做的過程以下: 算法

  • 申請空間,使其大小爲兩個已經排序序列之和,該空間用來存放合併後的序列
  • 設定兩個指針,最初位置分別爲兩個已經排序序列的起始位置
  • 比較兩個指針所指向的元素,選擇相對小的元素放入到合併空間,並移動指針到下一位置
  • 重複步驟3直到某一指針達到序列尾
  • 將另外一序列剩下的全部元素直接複製到合併序列尾
  • python代碼

    def merge(l1,l2):
        final=[]
        l1 = sorted(l1) 
        l2 = sorted(l2)
        while l1 and l2:
            if l1[0]<=l2[0]:
                final.append(l1.pop(0))
            else:
                final.append(l2.pop(0))
        return final+l1+l2

    歸併排序

    簡介

    歸併排序具體工做原理以下(假設序列共有n個元素): app

  • 1.將序列每相鄰兩個數字進行歸併操做,造成floor(n/2)個序列,排序後每一個序列包含兩個元素
  • 2.將上述序列再次歸併,造成floor(n/4)個序列,每一個序列包含四個元素
  • 3.重複步驟2,直到全部元素排序完畢
  • python代碼

    def mergesort(List):
        mid=int(len(List)/2)
        if len(List)<=1:
            return List
        return merge(mergesort(List[:mid]),mergesort(List[mid:]))
    相關文章
    相關標籤/搜索