选择排序,《学点算法吧,Python》

选择排序作为,最简单的排序方法,作为排序算法的入门练习再合适不过。


选择排序

选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。


算法步骤

  1. 选择未排序的第一个元素,依次跟其余元素进行对比,遇到比它数值小的就进行调换。
  2. 不断重复第1步,直到最后一个元素。

直接上图:

但是,这样是有问题的!

同一轮数据比较中,如果进行2次以上的调换,参与过调换的数据会按照与预期的排序相反的顺序出现在后续的数列中。

比如:

3、8参与过调换,也比较过大小,但他们之后出现在序列中的顺序与预期恰恰相反。需要后续再进行比较调换,人为增加了排序难度。相当于错误的利用了对比的信息。

要解决这个问题很简单,由后向前依次对比,从最后一位开始对比就可以了。

如下图

这样凡是参与过调换的数据在序列中就是以预期的顺序出现,相当于有效的利用了对比的信息。


选择排序的Python实现

先上序列,生成随机序列:

import random

def ord_list(n):
    ord = list(range(n))
    return ord
def ran_list(n):
    ran = ord_list(n)
    random.shuffle(ran)
    return ran

排序代码:

def selectionSort(list):
    for i in range(len(list) - 1):
        # 记录最小数的索引
        Index = i
        for j in range(len(list)-1,i ,-1): #生成倒叙的索引
            if list[j] < list[Index]:
                # i 不是最小数时,将 i 和最小数进行交换
                list[i], list[j] = list[j], list[i]
    return list

看看效果:

if __name__=='__main__':
    test_list =ran_list(10)
    print(test_list)
    selectionSort(test_list)
    print(test_list)

'''
输出如下:
[7, 0, 9, 2, 1, 8, 6, 5, 3, 4]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
'''

总结

这应该是最简单的算法了吧,但学习的过程总是由浅入深,由易到难,这样简单的算法也能给我们带来精神的愉悦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值