排序算法(四)之归并排序

一、归并排序
什么是归并?
归并排序的原理是什么?
能不能用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))

 同样的,再举出一个例子:

posted @ 2021-11-18 19:58  excellent_1  阅读(293)  评论(0编辑  收藏  举报