美文网首页
归并排序

归并排序

作者: SunnyQjm | 来源:发表于2020-06-23 19:56 被阅读0次

主要思想:

  1. 将序列分成两部分;
  2. 对两部分分别递归调用归并排序进行排序;
  3. 然后对各自有序的两部分进行归并:
    • 使用 leftHalfrightHalf 分别存储两个有序的子序列;
    • 然后依次对比两个子序列,将其合并到原序列当中成为一个整体的有序序列;
def mergeSort(A):
    def merge(A, l, m, r):
        leftHalf, rightHalf, i, j, k = A[l: m + 1], A[m + 1: r + 1], 0, 0, l
        while i < len(leftHalf) and j < len(rightHalf):
            if leftHalf[i] <= rightHalf[j]:
                A[k], i, k = leftHalf[i], i + 1, k + 1
            else:
                A[k], j, k = rightHalf[j], j + 1, k + 1
        while i < len(leftHalf):
            A[k], i, k = leftHalf[i], i + 1, k + 1
        while j < len(rightHalf):
            A[k], j, k = rightHalf[j], j + 1, k + 1

    def mergeSortHelper(A, l, r):
        if l >= r:
            return
        m = (l + r) // 2
        mergeSortHelper(A, l, m)
        mergeSortHelper(A, m + 1, r)
        merge(A, l, m, r)

    mergeSortHelper(A, 0, len(A) - 1)


if __name__ == '__main__':
    A = [5, 7, 1, 3, 6, 2, 4]
    mergeSort(A)
    print(A, "= [1, 2, 3, 4, 5, 6, 7]")

相关文章

  • 排序算法

    约定 选择排序 冒泡排序 插入排序 希尔排序 归并排序1. 归并方法2. 自顶向下归并排序3. 自底向上归并排序 ...

  • 排序二:归并、快排

    文章结构 归并排序 快速排序 源码 1. 归并排序 1.1 什么是归并排序 归并排序的思想是:将待排序的区间平分成...

  • java归并排序

    归并排序什么是归并排序:图解归并排序归并排序有两种实现方式,一是基于递归,而是基于迭代1)基于递归的归并排序: 基...

  • 算法—排序篇2

    1、归并排序(Merging Sort) 归并排序(Merging Sort): 就是利用归并的思想实现排序⽅法....

  • 常见的排序算法(2)

    要点 快速排序 归并排序 1.快速排序 2.归并排序

  • 排序算法之归并排序

    归并排序(Merge Sort) 归并排序是利用归并的思想实现排序的方式,该算法采用的是经典的分治算法 归并排序过...

  • 算法 第二章第二部分笔记

    各种排序算法的性能特点 选择排序 插入排序 希尔排序 归并排序 本地归并排序 自底向上的归并排序 快速排序 三向切...

  • 归并排序(二路归并排序)

    归并排序的思路 归并排序是通过“归并”操作完成排序的,将两个或者多个有序子表归并成一个子表。归并排序是“分治法”的...

  • 算法排序之归并排序和快速排序

    归并排序和快速排序用的都是分治的思想,用递归的编程技巧来实现.咱们先来看归并排序. 归并排序 归并排序的核心思想就...

  • 基于左闭右开的乱序数组归并排序 2020-04-24(未经允许,

    归并排序代码模板 递归形式思路:二分nums数组后对nums的归并排序 = 对左侧数组归并排序+对右侧数组归并排序...

网友评论

      本文标题:归并排序

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