python归并排序

参考:www.bilibili.com/video/BV1E4…

python实现

import datetime
import random

arr = [random.randint(0, 1000000) for x in range(500000)]
tempList = [0] * len(arr)


def mergeSort(arr, left, right, temp):
    if left < right:
        mid = (left + right) // 2
        # 左边递归
        mergeSort(arr, left, mid, temp)
        # 右边递归
        mergeSort(arr, mid + 1, right, temp)
        # 合并
        merge(arr, left, mid, right, temp)


def merge(arr, left, mid, right, temp):
    i = left
    j = mid + 1
    t = 0
    while i <= mid and j <= right:
        if arr[i] <= arr[j]:
            temp[t] = arr[i]
            i += 1
            t += 1
        else:
            temp[t] = arr[j]
            j += 1
            t += 1

    # 将剩下的存入temp中
    while i <= mid:
        temp[t] = arr[i]
        i += 1
        t += 1

    while j <= right:
        temp[t] = arr[j]
        j += 1
        t += 1

    t = 0
    while left <= right:
        arr[left] = temp[t]
        t += 1
        left += 1


start = datetime.datetime.now().timestamp()
mergeSort(arr, 0, len(arr) - 1, tempList)
end = datetime.datetime.now().timestamp()
print(f"总共花了{int(end - start)}s")