因此,你的代码应该像:
当我运行它时,只有第一个最小的数字被排序。问题出在回路里吗?
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
实际上有两个问题:
- 第二个
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中不需要临时变量来交换值。您可以简单地这样做:
>>> a = 5
>>> b = 3
>>> a, b = b, a
>>> a
3
>>> b
5
在您的交换代码中,它将是:A[i], A[mini] = A[mini], A[i]
是的,问题是在你的代码的交换部分,它需要放置在内部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