python实现归并排序时 ,单独调用merge可以输出正确,但是sort、merge一起调用输出结果
[0, 0, 0, 0, 0, 0, 0, 0]
自学数据结构到归并排序,不知道哪里有错误
import sys
sys.setrecursionlimit(100000) #例如这里设置为十万
def sort(arr,low,high):
if low < high :
mid = int((low+high)/2)
sort(arr,low,mid)
sort(arr,mid+1,high)
merge(arr,low,mid,high)
return arr
def merge(arr,low,mid,high):
temp1 = [0]*len(arr)
x = low
y = mid + 1
i = 0
while xand yif arr[x] <= arr[y]:
'''print(x)'''
temp1[i] = arr[x]
i += 1
x += 1
else:
''' print(y)'''
temp1[i] = arr[y]
i += 1
y += 1
while y<=high:
temp1[i] = arr[y]
i += 1
y += 1
while x<=mid:
temp1[i] = arr[x]
i += 1
x += 1
a = 0
b = 0
while a < len(arr):
arr[a] = temp1[b]
a += 1
b += 1
return arr
arr = [7,1,4,9,3,5,2,8]
low = 0
high = len(arr)-1
mid =int((low+high)/2)
print (sort(arr,low,high))
运行结果:[0, 0, 0, 0, 0, 0, 0, 0]
def merge(arr,low,mid,high):
temp1 = [0]*len(arr)
x = low
y = mid + 1
i = 0
while xand yif arr[x] <= arr[y]:
'''print(x)'''
temp1[i] = arr[x]
i += 1
x += 1
else:
''' print(y)'''
temp1[i] = arr[y]
i += 1
y += 1
while y<=high:
temp1[i] = arr[y]
i += 1
y += 1
while x<=mid:
temp1[i] = arr[x]
i += 1
x += 1
a = 0
b = 0
while a < len(arr):
arr[a] = temp1[b]
a += 1
b += 1
return arr
arr = [1,4,7,9,2,3,5,8]
low = 0
high = len(arr)-1
mid =int((low+high)/2)
print (merge(arr,low,mid,high))
运行结果:[1, 2, 3, 4, 5, 8, 7, 9]
可参考博文:https://blog.csdn.net/qq_42589613/article/details/110431662
# -*- coding: utf-8 -*-
def merge(left, right):
# 合并两个有序列表
res = []
while len(left) > 0 and len(right) > 0:
if left[0] < right[0]:
res.append(left.pop(0))
else:
res.append(right.pop(0))
if left:
res.extend(left)
if right:
res.extend(right)
return res
def mergeSort(arr):
# 归并函数
n = len(arr)
if n < 2:
return arr
middle = n // 2
left = arr[:middle] # 取序列左边部分
right = arr[middle:]# 取序列右边部分
# 对左边部分序列递归调用归并函数
left_sort = mergeSort(left)
# 对右边部分序列递归调用归并函数
right_sort = mergeSort(right)
#
return merge(left_sort, right_sort)
arr = [1,4,7,9,2,3,5,8]
a = mergeSort(arr)
print(a)