简单选择排序
选择排序顾名思义是选择,选择什么呢,选择的当前最小数的下标(数组)。
如果有长度为11的数组。0号位为哨兵位。从1号下标开始,1号位不管是什么数,我就先把1号位的数字1赋值给最小值下标minIndex,1号位这个位置永远是最小的(排完序后它对应的数字也应该是最小的),然后把最小值下标的数(当前下标为1)与余下的9个数依次比较,如果比较途中,有数字比1号位的数小,那么我就把那个比最小值下标要小的 数 的下标赋值给minIndex,简单来说就是minIndex对应的值总是相对未排序列中最小的,
把最小值的下标更新到minIndex,一次循环完成前把minIndex的值与当前最小位的值交换,什么是当前最小位,第一次循环1号下标就是最小位啊,第二次循环2号下标就是最小位啊,第三次,第四次......
以下是代码:
以下是1万个随机数的排序结果及时间:
比较上一篇博客中的冒泡排序,显然速度快了许多。
但选择排序的时间复杂度在 最好 最坏 平均 时都是O(n^2)
看似比起冒泡还要差一些,但为什么速度反而又快了些呢。
这个问题你们可以思考下。
最后稳定性当然不稳定了,交换的时候跳来跳去的能稳定吗,举个例 5 5 2 第一个数是5 ,第二个也是5,第三个2,第一次循环5和2换位置,第一个5这不直接跳过去,2个5互换位置再也回不来了。