'''
1、反复对半拆分数组,直到数组长度为1或者2
2、合并两个有序数组
分组,数组1排序、数组2排序
数组1排序:如果mid为1的话,直接排序,如果>1,分组
'''
import math
def sort(arr, left, right): # 归并再排序
if right - left > 2: # 当数组长度大于2时,拆分成左右两个数组,使左右两数组有序后再合并
mid = math.ceil((left + right)/2)
sort(arr, left, mid) # 使左边数组有序
sort(arr, mid, right) # 使右边数组有序
merge(arr, left, mid, right) # 合并后有序
elif right - left == 2: # 当数组长度等于2时,直接有序合并
mid = (left + right)//2
merge(arr, left, mid, right)
def merge(arr, left, mid, right):
temp, m, l, r = [], mid, left, right
while (left < mid) and (m + 1 <= right):
if arr[left] < arr[m]:
temp.append(arr[left])
left += 1
else:
temp.append(arr[m])
m += 1
if left == mid:
for x in arr[m:right]:
temp.append(x)
elif m == right:
for x in arr[left:mid]:
temp.append(x)
arr[l:r] = temp
L = [34, 26, 57, 66, 11, 33, 26, 99, 66, 3, 0]
sort(L, 0, len(L))
print(L)
python归并排序
最新推荐文章于 2023-01-11 11:52:35 发布