美文网首页
Python 排序算法之归并排序(7/8)

Python 排序算法之归并排序(7/8)

作者: Paycation | 来源:发表于2018-05-17 23:04 被阅读41次

思想

将列表进行递归的对半拆分,直到只剩下一个元素。然后,进行合并。
合并的方式可以这样理解:
左右两根管子里面装着数字球(经过排序)。首先比较那个球的数字大,大的一方就倒入一个叫 result 的竖管里。然后后面的数字球补空位。
当某一个管子为空时,另一方全部倒入 result。合并完成。


灵魂画师

注意管子里的数本身要经过排序。如何确保这一点?那就是不停拆分,直到每个小列表只剩一个元素,那么两两合并就可以保证合并的结果是有序的。然后重复此过程,直到所有元素都合并,排序完成。

代码实现

def merge(left, right):
    result = []
    while len(left)>0 and len(right)>0 :
        if left[0] <= right[0]: # 倒数字球的过程
            result.append( left.pop(0) )
        else:
            result.append( right.pop(0) )
    # 剩余的一并倒入
    result += left
    result += right
    return result

def merge_sort( li ):
    # 拆分到只剩一个元素为止
    if len(li) == 1:
        return li
    mid = len(li) // 2
    left = li[:mid]
    right = li[mid:]

    ll = merge_sort( left )
    rl =merge_sort( right )
    return merge(ll , rl)

带着实际的参数我们来走一遍:
[2, 1]
那么 merge_sort 第一次,分成 2 组 (2//2=1):
[2] 和 [1]
然后递归,再 merge_sort 一次,变成:
左右分别返回 [2], [1] 本身。也就是:
ll = [2]
rl = [1]
然后运行 merge(ll, rl),把大的吐出来,最后就是结果了。

相关文章

  • Python排序算法有哪几种?

    python排序算法有哪些?python中常见的排序算法有:插入排序、选择排序、冒泡排序、快速排序、归并排序、希尔...

  • Python实现程序员必备之排序算法汇总

    本文用Python实现了快速排序、插入排序、希尔排序、归并排序、堆排序、选择排序、冒泡排序共7种排序算法。 一、快...

  • 2018-06-30

    排序算法之归并排序 归并排序算法是排序算法中的经典算法之一,其核心思想是利用归并的思想实现的排序方法,该算法采用经...

  • 排序算法详细代码实现

    算法分类 算法时间复杂度 选择排序 插入排序 C++实现 Python实现 冒泡排序 Python实现 归并排序 ...

  • 第三章:高级排序算法

    归并排序算法(mergeSort) 算法思想:Python使用函数实现: 自底向上的归并排序算法 算法思想:Pyt...

  • 归并排序

    图解排序算法(四)之归并排序 基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用...

  • 归并排序

    来源:图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园 归并排序(MERGE-SORT...

  • java实现快速排序、归并排序、希尔排序、基数排序算法...

    快速排序算法 归并排序算法 希尔排序算法 基数排序算法

  • Python 排序算法之归并排序(7/8)

    思想 将列表进行递归的对半拆分,直到只剩下一个元素。然后,进行合并。合并的方式可以这样理解:左右两根管子里面装着数...

  • python实现归并排序(MergeSort)

    python实现【归并排序】(MergeSort) 算法原理及介绍 归并排序的核心原理是采用分治法(Divide ...

网友评论

      本文标题:Python 排序算法之归并排序(7/8)

      本文链接:https://www.haomeiwen.com/subject/jhprdftx.html