Python 中的插入排序不起作用
Insertion sort in Python doesn't work
我试过这个问题的这段代码 - Python insertion sort。我稍微修改了代码,去掉了 eval()
。
def sort_numbers(s):
for i in range(1, len(s)):
val = s[i]
j = i - 1
while (j >= 0) and (s[j] > val):
s[j+1] = s[j]
j = j - 1
s[j+1] = val
print s
x = raw_input("Enter numbers to be sorted: ").split()
sort_numbers(x)
它不适用于太多的测试用例。
In: 1001 101 20 24 2000
Out: 1001 101 20 2000 24
我也试过一些负数。该代码不起作用。为什么会这样?
这是因为 x
是一个字符串列表,而不是整数。您可以通过将此代码放在 sort_numbers
:
之前来更正您的输入示例
x = [ int(v) for v in x ]
原结果:
Enter numbers to be sorted: 1001 101 20 24 2000
['1001', '101', '20', '2000', '24']
添加该行后的结果:
Enter numbers to be sorted: 1001 101 20 24 2000
[20, 24, 101, 1001, 2000]
请注意,现在 print s
中显示的列表没有用引号括起来的元素
我试过这个问题的这段代码 - Python insertion sort。我稍微修改了代码,去掉了 eval()
。
def sort_numbers(s):
for i in range(1, len(s)):
val = s[i]
j = i - 1
while (j >= 0) and (s[j] > val):
s[j+1] = s[j]
j = j - 1
s[j+1] = val
print s
x = raw_input("Enter numbers to be sorted: ").split()
sort_numbers(x)
它不适用于太多的测试用例。
In: 1001 101 20 24 2000
Out: 1001 101 20 2000 24
我也试过一些负数。该代码不起作用。为什么会这样?
这是因为 x
是一个字符串列表,而不是整数。您可以通过将此代码放在 sort_numbers
:
x = [ int(v) for v in x ]
原结果:
Enter numbers to be sorted: 1001 101 20 24 2000
['1001', '101', '20', '2000', '24']
添加该行后的结果:
Enter numbers to be sorted: 1001 101 20 24 2000
[20, 24, 101, 1001, 2000]
请注意,现在 print s
中显示的列表没有用引号括起来的元素