深入理解选择排序

>> 选择排序


选择,选择,就是先选择好了,再交换。

冒泡排序的思路: 给定一个数组,每次循环以此找到最小的数的下标,最后与相应的下标的值交换。
平均时间复杂度: O(n^2)
最好情况: O(n^2) 已经排好序
最坏情况: O(n^2) 倒叙的时候
空间复杂度: O(1) 没有占用额外的空间
稳定性: 不稳定 排序前相等的两个数,排序后位置改变


: ) 选择排序值得注意的是:先存储下下标再进行交换。
代码如下在这里插入图片描述
代码解析:
定义一个存储每次循环 最小值下标变量
第一层循环一共循环length-1,可以理解为对length-1个都循环完了,最后一个数自然而然不需要判断了。
第二层循环目的是 找到此次循环的最小数,并将下标存储到刚定义的变量中
最后将这个 中间下标的值与外层i下标的值交换,完成一次内部循环。
理解:
选择排序核心思想是利用一个中间下标变量存储每次循环选择出的最小值,而不再是每次遇到最小值就使用交换,这样在普遍情况下可以减少交换赋值的开销。

平时我经常写的排序在这里插入图片描述
它与选择排序的区别:
平时写的排序,会使用更多的交换,而大多数的交换都是不必要的,如下图。 在这里插入图片描述
这个结果很容易看出来,选择排序相对来说谨慎得多,它只有找打想要的元素之后才会调用swap。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值