排序算法: 选择排序

145 阅读1分钟

一.简介

基本思想:
在长度为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]