选择排序

参考: 选择排序(动图理解)

# selectsort
"""
认为第一个数是最小的,遍历后面的数跟一个数比,如果比第一个数,记录下来
遍历完毕后得出后面的数中最小的数,和第一个交换位置
此时第一个数已经是最小的,继续遍历,认为第2个数是剩余所有数中最小的,继续重复上述步骤即可
"""


def select_sort(li):
    n = len(li)
    # 内部循环每次找到一个最小的数,共需要n-1次
    for j in range(n - 1):  # j=1

        # 记录0位置,认为0位置就是最小的数
        min = j
        # 遍历后面的数据,与最小的数进行比较
        for i in range(j + 1, n):
            if li[i] < li[min]:
                min = i
        # 循环结束时,min指向的是最小的数,把最小的数放到剩下的无序序列的最前面
        li[min], li[j] = li[j], li[min]


if __name__ == '__main__':
    l = [4, 2, 3, 5, 1]
    l = [5, 4, 3, 2, 1]
    select_sort(l)
    print(l)
    # 稳定性:不稳定
    # 最坏时间复杂度:O(n^2)
    # 最优时间复杂度:O(n^2)