我写了一个不起作用的选择排序实现。我无法弄清楚原因。
#!/usr/bin
def sel_sort(list):
for i in xrange(n-2):
imin=i
for j in xrange(i+1,n-1):
if list[j]<list[imin]:
imin=j
list[imin],list[i]=list[i],list[imin]
n=int(raw_input("Enter number of elements : "))
x=[]
for t in xrange(n):
x.append(int(raw_input()))
sel_sort(x)
for k in xrange(n):
print x[k],
也有人可以解释为什么我应该在这个程序的开头放置#!/usr/bin
吗?
答案 0 :(得分:1)
使用您的代码,在每次其他迭代之后,结果如下,
[0, 3, 77, 25, 87, 22, 12, 7, 2, 43]
[0, 2, 77, 25, 87, 22, 12, 7, 3, 43]
[0, 2, 3, 25, 87, 22, 12, 7, 77, 43]
[0, 2, 3, 7, 87, 22, 12, 25, 77, 43]
[0, 2, 3, 7, 12, 22, 87, 25, 77, 43]
[0, 2, 3, 7, 12, 22, 87, 25, 77, 43]
[0, 2, 3, 7, 12, 22, 25, 87, 77, 43]
[0, 2, 3, 7, 12, 22, 25, 77, 87, 43]
[0, 2, 3, 7, 12, 22, 25, 77, 87, 43]
0 2 3 7 12 22 25 77 87 43
你可以清楚地看到,它忽略了最后一个元素!
xrange基本上从头到尾生成1(xrange(开始,结束))!
内环应该在范围i + 1到n而不是n-1
def sel_sort(list):
for i in xrange(n-2):
imin=i
#here range is i+1 to n
for j in xrange(i+1,n):
if list[j]<list[imin]:
imin=j
list[imin],list[i]=list[i],list[imin]
print list
实施例,
输入:
x=[7, 3, 77, 25, 87, 22, 12, 0, 2, 43]
输出:
0 2 3 7 12 22 25 43 77 87
通过评论中共享的wiki链接可以很好地理解在该程序开头使用#!/ usr / bin。 This会对此有明确的见解!
希望它有所帮助!