>> 选择排序
选择,选择,就是先选择好了,再交换。
冒泡排序的思路: 给定一个数组,每次循环以此找到最小的数的下标,最后与相应的下标的值交换。
平均时间复杂度: O(n^2)
最好情况: O(n^2) 已经排好序
最坏情况: O(n^2) 倒叙的时候
空间复杂度: O(1) 没有占用额外的空间
稳定性: 不稳定 排序前相等的两个数,排序后位置改变
: ) 选择排序值得注意的是:先存储下下标再进行交换。
代码如下
-
代码解析:
- 先 定义一个存储每次循环 最小值下标的 变量。
- 第一层循环一共循环length-1,可以理解为对length-1个都循环完了,最后一个数自然而然不需要判断了。
- 第二层循环目的是 找到此次循环的最小数,并将下标存储到刚定义的变量中
- 最后将这个 中间下标的值与外层i下标的值交换,完成一次内部循环。 理解:
- 选择排序核心思想是利用一个中间下标变量存储每次循环选择出的最小值,而不再是每次遇到最小值就使用交换,这样在普遍情况下可以减少交换赋值的开销。
平时我经常写的排序
-
它与选择排序的区别:
-
平时写的排序,会使用更多的交换,而大多数的交换都是不必要的,如下图。
这个结果很容易看出来,选择排序相对来说谨慎得多,它只有找打想要的元素之后才会调用swap。