选择排序数组排序

时间:2016-10-08 14:04:31

标签: python

当我运行它时,只有第一个最小的数字被排序。这个问题出在循环的某个地方吗?

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

2 个答案:

答案 0 :(得分:0)

实际上有两个问题:

  1. 您的第二个if应位于内部for循环之外。
  2. 你的外圈和内圈应该分别迭代到n-1n,而不是n-2n-1
  3. 因此,您的代码应该是:

    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