归并排序--Python实现

 记录一下自己折腾归并排序,其实再稍加修改,可以用来解决合并两个有序数组问题,思路就是双指针法

#coding:utf-8

def merge(a, left, mid,  right):
    i = left
    j = mid + 1
    b = []

    while i <= mid and j <= right:
        if a[i] <= a[j]:
            b.append(a[i])
            i += 1
        else:
            b.append(a[j])
            j += 1

    while i <= mid:
        b.append(a[i])
        i += 1

    while j <= right:
        b.append(a[j])
        j += 1

    return b


a = [1, 3, 5, 7, 2, 4, 6, 8]
test = merge(a, 0, 3, 7)
print(test) #[1, 2, 3, 4, 5, 6, 7, 8]

归并排序递归实现

def merge(left, right):
    l, r = 0, 0
    result = []
    while l < len(left) and r < len(right):
        if left[l] < right[r]:
            result.append(left[l])
            l += 1
        else:
            result.append(right[r])
            r += 1
    result += left[l:]
    result += right[r:]
    return result

def mergeSort(a):
    if len(a) <= 1:
        return a
    mid = len(a) // 2
    left = mergeSort(a[:mid])
    right = mergeSort(a[mid:])
    return merge(left, right)

print(mergeSort([1, 3, 5, 7, 2, 4, 6, 8]))

猜你喜欢

转载自blog.csdn.net/sinat_21791203/article/details/108344699