将数组从中间分为两部分,一直分,一直分,分到只剩两两一堆,再全都组合回来。
def mergesort(arr):
if nums == None or len(arr) < 2:
return arr
sortProcess(arr, 0, len(arr) - 1)
return arr
def sortProcess(arr, l, r):
if l == r:
return arr
mid = (l + r) // 2
sortProcess(arr, l, mid)
sortProcess(arr, mid + 1, r)
merge(arr, l, mid, r)
def merge(arr, l, mid, r):
helpd = []
i = l
j = mid +1
while (i <= mid and j <= r):
if arr[i] < arr[j]:
helpd.append(arr[i])
i += 1
else:
helped.append(arr[j])
j += 1
if i <= mid:
helpd += arr[i : mid+1]
if j <= r:
helpd += arr[j : r+1]
arr[l : r + 1] = helpd[:]
nums = [9,8,2,6,4,3,5,1,7]
mergesort(nums)
print(nums)