import time
def reverse(arr, i, index, j):
list1 = arr[i:index]
reverse_list1 = list(reversed(list1)) # 内存反转序列arr[i, index)
list2 = arr[index:j]
reverse_list2 = list(reversed(list2)) # 内存反转序列arr[index, j)
list3 = list(reversed(reverse_list1 + reverse_list2)) # 原地归并两个子序列
list4 = arr[0:i] + list3 + arr[j:] # 归并后的整个序列
for i in range(len(list4)):
arr[i] = list4[i]
return arr
def merge(arr, l, m, h):
i = l
j = m + 1
while i < j and j <= h:
while i < j and arr[i] <= arr[j]:
i += 1
index = j
while j <= h and arr[j] < arr[i]:
j += 1
# print("low: {},index:{},high:{}".format(i, index, j))
arr = reverse(arr, i, index, j)
i = i + (j - index)
return arr
def merge_sort(arr, l, h):
if l < h:
mid = l + (h - l) // 2
merge_sort(arr, l, mid)
merge_sort(arr, mid + 1, h)
result = merge(arr, l, mid, h)
return result
if __name__ == '__main__':
user_input = input('输入10个以逗号分隔的数据:\n').strip()
data=[int(item) for item in user_input.split(',')]
print("排序前: ", data)
start = time.perf_counter()
result = merge_sort(data, 0, len(data) - 1)
print("排序后:", result)
end = time.perf_counter()
print("总共用时:", end - start)
python实现原地归并排序 in-place_merge_sort
最新推荐文章于 2023-10-23 16:42:56 发布