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

时间:2017-03-14 16:19:50

标签: python sorting selection-sort

我写了一个不起作用的选择排序实现。我无法弄清楚原因。

#!/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吗?

1 个答案:

答案 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会对此有明确的见解!

希望它有所帮助!