( Python ) 你能调换一下选择排序的起始过程吗?

( Python ) Can you swap the starting process of the selection sort?

从求最小值放左边到求最大值放右边

def SelectionSort(a_list):
    n = len(a_list)

    for i in range(0, n-1):
        iMin = i
        print(a_list)

        for j in range(i+1, n):
            if a_list[j] < a_list[iMin]:
                iMin = j

        temp = a_list[i]
        a_list[i] = a_list[iMin]
        a_list[iMin] = temp
    
    print()
    return a_list

someList = [45,984,6,90,8946,89]
SelectionSort(someList)

是否可以将过程从最小值 => 最大值交换为最小值 <= 最大值

答案应该是这样的。

[6, 45, 89, 89, 984, 8946]

是:

  • iMin 重命名为 iMax
  • 镜像您使用的两个范围:
    • range(0, n-1) 变为 range(n-1, 0, -1)
    • range(i+1, n) 变为 range(i-1, -1, -1)
  • 镜像比较运算符
    • < 变为 >

结果:

def SelectionSort(a_list):
    n = len(a_list)

    for i in range(n-1, 0, -1):
        iMax = i
        print(a_list)

        for j in range(i-1, -1, -1):
            if a_list[j] > a_list[iMax]:
                iMax = j

        temp = a_list[i]
        a_list[i] = a_list[iMax]
        a_list[iMax] = temp
    
    print()
    return a_list

与您的问题无关(如评论所述),可以这样进行交换:

    a_list[i], a_list[iMax] = a_list[iMax], a_list[i]