美文网首页
第二章merge算法的实现过程

第二章merge算法的实现过程

作者: Akademos | 来源:发表于2017-10-30 17:24 被阅读0次
# coding=utf-8
A = [5, 2, 4, 7, 10, 1, 3, 2, 6]


def merge2(A, p, q, r):
    """
    A[p:q]是一个排好序的数组
    A[q:r]是另外一个排好序的数组
    将两个排好序的子数组组成一个总的排好序的数组
    :param A:
    :param p:
    :param q:
    :param r:
    :return:
    """
    n1 = q - p + 1
    n2 = r - q
    L = [-1 for x in range(n1)]
    R = [-1 for x in range(n2)]
    for i in range(0, n1):
        L[i] = A[p + i]
    for j in range(0, n2):
        R[j] = A[q + j + 1]
    i = 0
    j = 0

    for k in range(p, r + 1):
        if i >= n1 and j < n2:  # 当L拍完序R未拍完序的情况
            A[k] = R[j]
            j = j + 1
        elif j >= n2 and i < n1:  # 当R拍完序L未拍完序
            A[k] = L[i]
            i = i + 1
        elif L[i] <= R[j]:
            A[k] = L[i]
            i = i + 1
        else:
            A[k] = R[j]
            j = j + 1

def merge_sort(A, p, r):
    if p < r:
        q = (p + r) / 2
        merge_sort(A, p, q)
        merge_sort(A, q + 1, r)
        merge2(A, p, q, r)
        print A, p, q, r


merge_sort(A, 0, len(A) - 1)
print A

相关文章

  • 第二章merge算法的实现过程

  • Java版归并排序算法实现

    merge函数的实现 递归方式实现(自顶向下)的归并排序算法 借用栈实现循环方式(自顶向下)的归并排序算法 不借用...

  • 插入排序【算法导论】

    注:学习算法导论,按照标准伪代码理解翻译为java实现,如有兴趣理解整个过程的细节,建议阅读《算法导论》第二章:2...

  • 归并排序【算法导论】

    注:学习算法导论,按照标准伪代码理解翻译为java实现,如有兴趣理解整个过程的细节,建议阅读《算法导论》第二章:2...

  • Leet Code:Merge k Sorted Lists

    一、前言: 本文将描述Merge k Sorted Lists的算法实现和分析。算法题目:将K个排序好的链表合并。...

  • Merge Two Sorted Lists(LeetCode)

    Merge Two Sorted Lists 合并两个有序链表。 JavaScript 实现算法 更多语言方法解析...

  • 技术交流

    算法篇 排序 归并排序 分治思想的实现merge过程 堆排序 堆结构1.完全二叉树2.每个节点子树上都比他的节点小...

  • 归并排序

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

  • 排序算法之归并排序

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

  • 数据结构02-高效排序算法

    第二章 高效排序算法 第二章 高效排序算法一、快速排序基本思想快速排序图示一次划分C 语言实现Java 语言实现算...

网友评论

      本文标题:第二章merge算法的实现过程

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