为什么 python 中的这个选择排序程序不能正常工作?

Why doesn't this selection-sort program in python work correctly?

我写了一个不起作用的选择排序实现。我不明白为什么。

#!/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, 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基本上是从start到end生成-1 (xrange(start,end))!

内部循环的范围应该是 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

本程序开头#!/usr/bin的使用,评论分享的wikilink很好理解。 This 会给出相同的清晰见解!

希望对您有所帮助!