当我运行它时,只有第一个最小的数字被排序。这个问题出在循环的某个地方吗?
def selectionSort(A):
n=len(A)
print(n)
mini=0
for i in range(0,n-2):
mini=i
for j in range(i+1,n-1):
if A[j]<A[mini]:
mini=j
if i!=mini:
temp=A[i]
A[i]=A[mini]
A[mini]=temp
return A
答案 0 :(得分:0)
实际上有两个问题:
if
应位于内部for
循环之外。n-1
和n
,而不是n-2
和n-1
。因此,您的代码应该是:
def selectionSort(A):
n=len(A)
print(n)
mini=0
for i in range(0,n-1):
mini=i
for j in range(i+1,n):
if A[j]<A[mini]:
mini=j
if i!=mini:
temp=A[i]
A[i]=A[mini]
A[mini]=temp
return A
输出:
>>> selectionSort([2, 5, 7, 1, 3, 0, 10, 43, 21, 32])
10
[0, 1, 2, 3, 5, 7, 10, 21, 32, 43]
建议:在python中不需要temp变量来交换值。你可以简单地这样做:
>>> a = 5
>>> b = 3
>>> a, b = b, a
>>> a
3
>>> b
5
在您的交换代码中,它将为:A[i], A[mini] = A[mini], A[i]
答案 1 :(得分:0)
是的,问题出在代码的交换部分,需要在内部for循环之后放置
def selectionSort(A):
n = len(A)
mini=0
for i in range(0,n-2):
mini=i
for j in range(i+1,n-1):
if A[j]<A[mini]:
mini=j
if i!=mini:
temp=A[i]
A[i]=A[mini]
A[mini]=temp
return A