归并排序 分治法 切分-> 排序 (分而治之) => 合并
合并部分
def merge(arr, low, mid, high):
container = []
i,j = low,mid+1
while i <= mid and j <= high:
if arr[i] <= arr[j]:
container.append(arr[i])
i += 1
else:
container.append(arr[j])
j += 1
if i <= mid:
container.extend(arr[i:mid+1])
elif j <= high:
container.extend(arr[j:high+1])
arr[low:high+1] = container
拆分部分
def sort(arr, low, high):
if low < high:
mid = (low+high) // 2
sort(arr, low, mid)
sort(arr, mid+1, high)
merge(arr,low, mid, high)
调用排序
def merge_sort(arr):
sort(arr, 0, len(arr)-1)
arr = [2, 7, 1, 4, 9]
merge_sort(arr)
print(arr)