zoukankan      html  css  js  c++  java
  • 排序算法(四)之归并排序

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

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

  • 相关阅读:
    大学的最后时光---我的毕设日记(二)
    大学的最后时光---我的毕设日记(一)
    记公司同事的一次集体活动
    ssh框架基本原理
    plsql基本操作记录
    eclipse快捷键。
    面向对象的特性:封装继承多态
    设置label中的对齐方式
    pixmap和label设置图片自适应大小
    类的继承
  • 原文地址:https://www.cnblogs.com/xj-excellent/p/15574133.html
Copyright © 2011-2022 走看看