归并排序

方法描述

归并排序的思想是想将列表分为两个有序的部分,然后分别在这两个列表中取数,更小的就放在新列表的前面。
为了实现列表的两部分分别是有序的,需要定义方法

def merge(li, low, mid, high):
    i = low                          # 最左边的元素
    j = mid + 1                      # 第二部分列表的起始元素
    temp = []                        # 临时存储的列表
    while i <= mid and j <= high:    # 终止条件。不能超过每个部分的最大下标
        if li[i] <= li[j]:           #  
            temp.append(li[i])
            i += 1
        else:
            temp.append(li[j])
            j += 1
    while i <= mid:
        temp.append(li[i])
        i += 1
    while j <= high:
        temp.append(li[j])
        j += 1
    li[low: high + 1] = temp


def merge_sort(li, low, high):
    if low < high:
        # 说明列表中至少有两个元素。因为一个元素一定是有序的
        mid = (low + high) // 2
        merge_sort(li, low, mid)
        merge_sort(li, mid + 1, high)
        merge(li, low, mid, high)


li = [3, 4, 5, 2, 1, 7, 6, 9, 8, 0]

print(li)
merge_sort(li, 0, len(li) - 1)
print(li)


posted @ 2022-04-07 22:14  尘。哀  阅读(29)  评论(0)    收藏  举报