选择排序的思想:
对于一个无序的数组,依次从数组中获得元素,然后从这个元素的后一位开始互相进行比较,在比较的过程中,如果有比当前取到的元素小的数,将其记录下来为min,并记录其索引minIndex,直到数组的末尾,该论循环结束,将当前取的值和比较得出最小的值进行交换。这样最小的值就排列到了数组的前面,循环往复即可完成排序。 优化思路:
在交换的时候进行判断,如果minIndex还是取到的值的索引,那么不进行交换
完整代码如下:
package com.sort
import java.text.SimpleDateFormat
import java.util.Date
fun main() {
// val intArray = intArrayOf(34,222,119,0)
val intArray = IntArray(80000)
for (i in 0 until 80000) {
intArray[i] = (Math.random() * 8000000).toInt()
}
val date = Date()
val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
val formatDate = simpleDateFormat.format(date)
println("排序前的时间:$formatDate")
selectSort(intArray)
val date2 = Date()
val formatDate2 = simpleDateFormat.format(date2)
println("排序前的时间:$formatDate2")
println(intArray.contentToString())
}
// 选择排序
fun selectSort(array: IntArray) {
// 每一轮去找到最小的
for (i in array.indices) {
var minIndex = i
var min = array[i]
// 将从i+1开始进行比较,直到列表的末尾
// 由于i是表示自己,因此没必要和自己比较,所以+1
for (j in i + 1 until array.size) {
if (min > array[j]) {
min = array[j]
minIndex = j
}
}
// 当minIndex不等于最开始初始化的值后,才进行交换
if (minIndex != i) {
array[minIndex] = array[i]
array[i] = min
}
// println(array.contentToString())
}
}