归并排序:归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法:

1.自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法); 2.自下而上的迭代;

时间复杂度 O(n log n)

空间复杂度 O(n)

def merge(data, low, mid, high):
    i = low
    j = mid + 1
    tmp = []

    while i <= mid and j <= high:  # 只要左右两边都有数
        if data[i] < data[j]:
            tmp.append(data[i])
            i += 1
        else:
            tmp.append(data[j])
            j += 1
    # while 执行完后,肯定有一部分没数
    while i <= mid:
        tmp.append(data[i])
        i += 1
    while j <= high:
        tmp.append(data[j])
        j += 1
    # 交换值
    data[low: high + 1] = tmp


def merge_sort(data, low, high):
    if low < high:  # 保证至少有两个元素,递归
        mid = (low + high) // 2
        merge_sort(data, low, mid)
        merge_sort(data, mid + 1, high)
        merge(data, low, mid, high)


import random

data = [i for i in range(10)]
random.shuffle(data)
print(data)
merge_sort(data, 0, len(data) - 1)
print(data)

归并排序

results matching ""

    No results matching ""