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


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

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

  • 相关阅读:
    some things
    关于我的兼职创业历程
    慢牛APP相关截图
    慢牛系列五:用百度语音识别添加自选股
    慢牛系列四:好玩的React Native
    慢牛系列三:React Native实践
    慢牛系列二:前端技术选择
    慢牛系列一:如何抓取股票数据
    会写程序的屌丝是潜力股
    慢牛股票-基于Sencha+Cordova的股票类APP
  • 原文地址:https://www.cnblogs.com/xj-excellent/p/15574133.html
Copyright © 2020-2023  润新知