使用python实现归并排序

来源:互联网 发布:php截取一段字符串 编辑:程序博客网 时间:2024/06/10 03:07
def merge(left, right):    """归并两个数组    :param left: 第一个数组    :param right:  第二个数组    :return: 归并后的有序的的数组    """    print("left", left)    print("right", right)    i, j = 0, 0    n1, n2 = len(left), len(right)    r = []    while i < n1 and j < n2:        while i < n1:            if j == n2:                break            if left[i] <= right[j]:                r.append(left[i])            else:                break            i += 1        while j < n2:            if i == n1:                break            if right[j] <= left[i]:                r.append(right[j])            else:                break            j += 1    r.extend(left[i:])    r.extend(right[j:])    return rdef merge_sort(a):    """    使用递归来完成归并    :param a: 要排序的数组    :return:  返回值为排好序的数组    """    if len(a) == 1:        return a    mid = len(a) >> 1    left = merge_sort(a[:mid])  # 给左边排序    right = merge_sort(a[mid:])  # 给右边排序    return merge(left, right)if __name__ == "__main__":    a = [10, 2, 3, 6, 8, 1, 10, 100, 200, 6]  # , 3, 10, 4, 3, 10, 10, 4, 3, 10]    print(a)    b = merge_sort(a)    print(b)
原创粉丝点击