选择排序

原理:每次都选择最小的元素与其交换位置

第一版:

def select_sort(_list):
    for i in range(1, len(_list)):
        min_num_index = _list[1:].index(min(_list[i:])) + 1
        if _list[i - 1] > _list[min_num_index]:
            _list[i - 1], _list[min_num_index] = _list[min_num_index], _list[i - 1]
    return _list

可以使用了过多的原生方法,并且原生方法底层也多是循环,时间复杂度远超O(n**2)

标准版:

def select_sort(lst):
    for i in range(0, len(lst)):
        min_index = i
        for j in range(i + 1, len(lst)):
            if lst[min_index] > lst[j]:
                min_index = j
        lst[min_index], lst[i] = lst[i], lst[min_index]
    return lst

进阶版:

# 最大`最小值 一起的选择排序
def select_sort(lst):
    n = len(lst)-1
    i = 0
    while i < n:
        min_index = i
        max_index = n
        for j in range(i, n+1):
            if lst[min_index] >= lst[j]:
                min_index = j
            if lst[max_index] < lst[j]:
                max_index = j
        # 当min和max的位置是要互换的话,就只换一次
        if max_index - i == min_index - n:
            lst[min_index], lst[i] = lst[i], lst[min_index]
        else:
            lst[min_index], lst[i] = lst[i], lst[min_index]
            lst[max_index], lst[n] = lst[n], lst[max_index]
        i += 1
        n -= 1
    return lst

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值