排序算法(四)之歸併排序

一、歸併排序
什麼是歸併?
歸併排序的原理是什麼?
能不能用python代碼敲出一個實例?
同樣的,這篇文章的目的也是要爲大家揭開這幾個疑惑。
歸併排序:從字面意思上來看,主要是歸和並,也就是先歸類,分開,然後再合併起來。採用"分治法"的思想,分而治之,一半一半的拆分去排序
我們通過例子來一步步看懂它的原理。比如:有一個列表【8,4,5,7,3,1,6,2】,請用歸併排序的方法將其升序排列
  ①先把他們一半一半的拆開:{8,4,5,7}、{3,1,6,2}
  ②再接着拆             {8,4}、{5,7}、       {3,1}、{6,2}
       ③在已拆分的子序列裏面,比較大小:第一小組,4比8小,4排左邊,8排右邊;同理其他組別也是一樣的道理,小的往左排,大的往右排
               {4,8}、{5,7}                                             {1、3}、{2,6}
       ④再合併:               {4,5,7,8}                            {1,2,3,6}
  ⑤最後合併:         {1,2,3,4,5,6,7,8}

其原理的實質就是先分開,後合併;分開之後再比大小,最後又合併,放到一個大的序列裏面

看下面的python代碼實現:

def merge_Sort(arr):
    import math
    if (len(arr) < 2):
        return arr
    # 從中間開始一分爲二
    middle = math.floor(len(arr) / 2)
    left, right = arr[0:middle], arr[middle:]
    return merge(merge_Sort(left), merge_Sort(right))

# 在小的序列裏面的左右兩個數進行大小比較
def merge(left, right):
    result = []
    while left and right:
        if left[0] <= right[0]:
            result.append(left.pop(0))
        else:
            result.append(right.pop(0));
    while left:
        result.append(left.pop(0))
    while right:
        result.append(right.pop(0));
    return result


li4 = [8, 4, 5, 7, 3, 1, 6, 2]
print(merge_Sort(li4))

 同樣的,再舉出一個例子:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章