Python上的合并排序:获得的结果的不寻常模式
我有一个从0到9999的10000个整数的未排序数组。我想对这个未排序的数组应用合并排序,并编写了以下代码-Python上的合并排序:获得的结果的不寻常模式,python,python-2.7,mergesort,Python,Python 2.7,Mergesort,我有一个从0到9999的10000个整数的未排序数组。我想对这个未排序的数组应用合并排序,并编写了以下代码- import sys def merge_sort(data): result = [] if len(data) <= 1: return data else: mid = int(len(data)/2) left = data[:mid] right = data[mid:]
import sys
def merge_sort(data):
result = []
if len(data) <= 1:
return data
else:
mid = int(len(data)/2)
left = data[:mid]
right = data[mid:]
sorted_left = merge_sort(left)
sorted_right = merge_sort(right)
i = j = k = 0
total_len = len(sorted_left) + len(sorted_right)
for k in range(0, total_len):
if i < len(sorted_left) and j < len(sorted_right):
if sorted_left[i] < sorted_right[j]:
result.append(sorted_left[i])
i = i+1
k = k+1
elif sorted_left[i] > sorted_right[j]:
result.append(sorted_right[j])
j = j+1
k = k+1
elif i < len(sorted_left):
result.append(sorted_left[i])
i = i+1
k = k+1
elif j < len(sorted_right):
result.append(sorted_right[j])
j = j+1
k = k+1
else:
sys.exit("There is some issue with the code")
return result
print merge_sort(data)
导入系统
def合并_排序(数据):
结果=[]
如果len(数据)排序正确[j]:
result.append(排序右[j])
j=j+1
k=k+1
如果i附带说明-我运行此代码进行调试,运行时没有出现错误,生成了这些结果。
您正在订购字符串:
'9989'<'999'<'9990'
。如果要对整数进行排序,必须将输入列表转换为整数。数据是以字符串还是整数的形式输入的?根据示例输出,它们是字符串
在这种情况下,“1”正好在“10”之前。如果需要整数,则可以将其转换为int进行排序。您的
数据是字符串,而不是数字。要转换为整数,请使用:
data = [int(x) for x in data]
Python将“比较”各种各样的对象。例如:
>>> "a" < "ab"
True
>>> None < "a"
True
>>> 1 < "a"
True
通过为对象定义自己的方法,有很大的灵活性。看起来数据是字符串,而不是数字。字符串排序导致您看到的顺序。在将数据传递到merge\u sort
之前,请尝试将数据转换为整数。我将首先尝试将其解析为numbersTry:data=[int(x)for x in data]
。是的,它成功了!!对我来说,知道代码是如何比较这两个字符串是很奇怪的。。。
object.__lt__(self, other)
object.__le__(self, other)
object.__eq__(self, other)
object.__ne__(self, other)
object.__gt__(self, other)
object.__ge__(self, other)