一.简介
基本思想:
在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;
第二次遍历n-2个数,找到最小的数值与第二个元素交换;
第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。
平均时间复杂度:O(n2)
二.代码实现
fun selctionSort(arr: IntArray) {
for (i in arr.indices) {
var minIndex = i
// 找到最小的数值与第 i 个元素交换
for (j in i + 1 until arr.size) {
if (arr[minIndex] > arr[j]) {
minIndex = j
}
}
if (minIndex != i) {
val temp = arr[i]
arr[i] = arr[minIndex]
arr[minIndex] = temp
}
println("I=$i, Arr=${arr.contentToString()}")
}
}
}
fun main() {
val nums = intArrayOf(5, 7, 6, 3, 1, 2, 4, 8, 9)
Demo.selctionSort(nums)
println("结果: ${nums.contentToString()}")
}
- 运行结果
I=0, Arr=[1, 7, 6, 3, 5, 2, 4, 8, 9] I=1, Arr=[1, 2, 6, 3, 5, 7, 4, 8, 9] I=2, Arr=[1, 2, 3, 6, 5, 7, 4, 8, 9] I=3, Arr=[1, 2, 3, 4, 5, 7, 6, 8, 9] I=4, Arr=[1, 2, 3, 4, 5, 7, 6, 8, 9] I=5, Arr=[1, 2, 3, 4, 5, 6, 7, 8, 9] I=6, Arr=[1, 2, 3, 4, 5, 6, 7, 8, 9] I=7, Arr=[1, 2, 3, 4, 5, 6, 7, 8, 9] I=8, Arr=[1, 2, 3, 4, 5, 6, 7, 8, 9] 结果: [1, 2, 3, 4, 5, 6, 7, 8, 9]