Python 中的合并排序函数
Merge Sort Function in Python
我在使用 Python 中的某些代码时遇到问题:
def sort(number_list):
if len(number_list <= 1):
return number_list
front_list = []
back_list = []
counter = 0
half = len(number_list)//2
for x in number_list:
if counter < half:
front_list.append(x)
counter += 1
else:
back_list.append(x)
front_list = sort(front_list)
back_list = sort(back_list)
print(front_list)
print(back_list)
return merge(front_list, back_list)
def merge(front_list, back_list):
output = []
i = 0
j = 0
lenght1 = len(front_list)
length2 = len(back_list)
while i < lenght1 or j < length2:
if i < lenght1 and j < length2:
if front_list[i] <= back_list[j]:
output += [front_list[i]]
i = i + 1
else:
output += [back_list[j]]
j = j + 1
elif i < front_list:
output += [front_list[i]]
i = i+1
else:
output += [back_list[j]]
j = j+1
return output
我一直收到类型错误不可排序类型:list() <= int()
有人可以让我知道我哪里出错了吗?谢谢!
sort()
函数中的if语句应该如下:
if len(number_list) <= 1:
return number_list
此外,在 merge()
elif i < front_list:
应该是
elif i < lenght1:
仅供参考,您可以在使用 python 切片和稍微更改合并逻辑方面以某种方式简化您的逻辑:
def sort(number_list):
if len(number_list) <= 1:
return number_list
half = len(number_list)//2
front_list = sort(number_list[:half])
back_list = sort(number_list[half:])
print(front_list)
print(back_list)
return merge(front_list, back_list)
def merge(front_list, back_list):
output = []
j = 0
for i in range(front_list):
while j < len(back_list) and front_list[i] > back_list[j]:
output.append(back_list[j])
j += 1
output.append(front_list[i])
for x in range(j, len(back_list)):
output.append(back_list[x])
return output
我在使用 Python 中的某些代码时遇到问题:
def sort(number_list):
if len(number_list <= 1):
return number_list
front_list = []
back_list = []
counter = 0
half = len(number_list)//2
for x in number_list:
if counter < half:
front_list.append(x)
counter += 1
else:
back_list.append(x)
front_list = sort(front_list)
back_list = sort(back_list)
print(front_list)
print(back_list)
return merge(front_list, back_list)
def merge(front_list, back_list):
output = []
i = 0
j = 0
lenght1 = len(front_list)
length2 = len(back_list)
while i < lenght1 or j < length2:
if i < lenght1 and j < length2:
if front_list[i] <= back_list[j]:
output += [front_list[i]]
i = i + 1
else:
output += [back_list[j]]
j = j + 1
elif i < front_list:
output += [front_list[i]]
i = i+1
else:
output += [back_list[j]]
j = j+1
return output
我一直收到类型错误不可排序类型:list() <= int() 有人可以让我知道我哪里出错了吗?谢谢!
sort()
函数中的if语句应该如下:
if len(number_list) <= 1:
return number_list
此外,在 merge()
elif i < front_list:
应该是
elif i < lenght1:
仅供参考,您可以在使用 python 切片和稍微更改合并逻辑方面以某种方式简化您的逻辑:
def sort(number_list):
if len(number_list) <= 1:
return number_list
half = len(number_list)//2
front_list = sort(number_list[:half])
back_list = sort(number_list[half:])
print(front_list)
print(back_list)
return merge(front_list, back_list)
def merge(front_list, back_list):
output = []
j = 0
for i in range(front_list):
while j < len(back_list) and front_list[i] > back_list[j]:
output.append(back_list[j])
j += 1
output.append(front_list[i])
for x in range(j, len(back_list)):
output.append(back_list[x])
return output