归并排序
方法描述
归并排序的思想是想将列表分为两个有序的部分,然后分别在这两个列表中取数,更小的就放在新列表的前面。
为了实现列表的两部分分别是有序的,需要定义方法
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)

浙公网安备 33010602011771号