python-归并排序

def merge(li, low, mid, high):  # 需要mid左右两边的列表是有序的
    i = low
    j = mid + 1
    ltmp = []
    while i <= mid and j <= high:  # 左右两边都要有数
        if li[i] < li[j]:
            ltmp.append(li[i])
            i += 1
        else:
            ltmp.append(li[j])
            j += 1
    # while执行完,肯定有一部分没数了
    while i <= mid:
        ltmp.append(li[i])
        i += 1
    while j <= high:
        ltmp.append(li[j])
        j += 1
    li[low:high + 1] = ltmp

def merge_sort(li, low, high):  # 利用递归将原列表分解成一段段小列表
    if low < high:  # 至少有两个元素,递归
        mid = (low + high) // 2
        merge_sort(li, low, mid)
        merge_sort(li, mid+1, high)
        print(li[low:high + 1])
        merge(li, low, mid, high)  # 将小列表合并排序


li = list(range(20))
import random
random.shuffle(li)
print(li, "原列表")
merge_sort(li, 0, len(li)-1)
print(li, "排序后")

 

posted on 2023-02-01 14:33  夜黎i  阅读(25)  评论(0)    收藏  举报

导航