今天说排序算法中的选择排序,它的基本思路是这样的,一趟排序过后选出这一趟中最小的值,然后和起始位置的值进行交换,这样排序n次之后就得到了排序后的数据
下面我们用一张图来更清晰的说明这种排序的过程
待排序数组为7,5,4,2
第一趟:从位置0开始也就是数值7,将后面的数字与7做比较。记录较小值的位置,这一趟选择出最小的数字2,最后2与7位置做交换
第二趟:从位置1开始也就是数值为5,将后面的数字与5做比较。选择出最小的数字4,最后4与5位置做交换
第三趟:从位置2开始也就是数值为5(因为他与4做交换了,所以当前的值是5),与后面数字与5做比较,没有比5小的不需要做位置交换
第四趟:从位置3开始也就是数值为7,因为这是数组的最后一个数可以不需要比较,它就为最大值
选择排序的时间复杂度为O(n²)
空间复杂度为O(1)
选择排序不是稳定的排序算法,比如有如下 1,8,[7],7,9数组要排序。我们排序到8这个数,比8小的要排在8之前,[7]、7都比8要小,这一趟之后交换的是后面7,交换之后位置关系是 1,7,[7],8,9。所以是不稳定的排序
最后我们看一下具体的算法
Utils.exchange();
这句的含义是交换数组中两个数的位置
往期文章: