1.概叙
选择排序就是通过遍历找到数组中最小的值,不断的与数组中首个未经过排序的数据进行交互的排序算法。(不稳定的排序算法)。
2.排序过程
1.初始化一个数组
3, 6, 5, 9, 1, 4, 2, 8, 7
2.找到数组中最小值
3, 6, 5, 9, **1**, 4, 2, 8, 7
3.将最小值与第一个数进行交换
3, 6, 5, 9, 1, 4, 2, 8, 7
↓
1, 6, 5, 9, 3, 4, 2, 8, 7
4.从第2位开始找到数组中最小值
1, 6, 5, 9, 3, 4, **2**, 8, 7
5.将最小值与第二个数进行交换
1, 6, 5, 9, 3, 4, 2, 8, 7
↓
1, 2, 5, 9, 3, 4, 6, 8, 7
6.从第3位数开始找到数组中最小值
......
不断重复上述步骤,直到数组从小到大排列
3.代码
class SelectionSort {
companion object{
@JvmStatic
fun main(args: Array<String>) {
var array= intArrayOf(3,6,5,9,1,4,2,8,7)
selectSort(array)
array.forEach {
print(it)
}
}
private fun selectSort(array:IntArray){
for(i in array.indices){
//每一趟循环比较时,min用于存放较小元素的数组下标,这样当前批次比较完毕最终存放的就是此趟内最小的元素的下标,避免每次遇到较小元素都要进行交换。
var minIndex=i
for(j in i until array.size-1){
if(array[j]<array[minIndex]){
minIndex=j
}
}
var t=array[i]
array[i]=array[minIndex]
array[minIndex]=t
}
}
}
}
4.时间复杂度
在最好情况下也就是数组完全有序的时候,无需任何交换移动,在最差情况下,也就是数组倒序的时候,交换次数为n-1次。综合下来,时间复杂度为O(n2)
网友评论