选择排序——数组排序



当我运行它时,只有第一个最小的数字被排序。问题出在回路里吗?

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

实际上有两个问题:

  1. 第二个if应该在for内环之外。
  2. 你的外循环和内循环应该分别迭代到n-1n,而不是n-2n-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