第二章merge算法的实现过程

# 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容