【选择排序】
【基本原理】
依次比较
找出极值
最后交换
每一轮从头或尾开始遍历,找出一个极值(最大或最小)。一轮完毕之后,将极值放到最前或者最后。
【关键逻辑】
循环n次
有几个数就比较多少轮
极值的索引
找出极值
记录索引
一轮结束
交换位置
放在头部或尾部
【标准实现】
排序结果
【逻辑分析】
为什么有
两层循环嵌套
第一层
决定排序轮数
第二层
用于找出每轮的极值
为什么是 j = i + 1
每一轮之前默认极值都是 i
第一次比较用 i 的下一个比较
从图中黄色的数字可见
每一轮会把极值放到头部
而 i 是从0~n的
每一轮都会把极值
放到 i 的位置
如何降序排列
升序(从小到大)
降序(从大到小)
具体是哪种排序
关键点就是条件表达式
如果是小于(<)
(从头到尾遍历时)
找出最小的往前放
结果就是升序排列
如果是大于(>)
(从头到尾遍历时)
找出最大的往前放
结果就是降序排列
【从哪开始找?找到放在哪?】
上面的选择排序,是从第一个开始,依次往后找极值,找到后放到最前面。选择排序没有固定的写法,你可以从前往后找,也可以从后往前找,找到后你可以放在最前面,也可以放在最后面。只要理解了基础逻辑,只需要简单改改逻辑便可实现。
举例
从前往后找
找到放最后
【练习】
目前我已经实现了,从头往后找,把找到的极值放在 最前面 和 最后面 两种选择排序。如果你理解了选择排序,你可以自己实现从尾往前找,把找到的极值放在 最前面 和 最后面。
【总结】
·基本原理·
依次比较
找出极值
最后交换
·套路写法·
两层循环
一层轮数
一层寻找
初始索引
记录极值
第二层循环外交换
·注意事项·
从头遍历
从尾遍历
放在头部
放在尾部
第二层循环外交换
关注唐老狮获取更多干货内容