选择排序

65 阅读2分钟
var arr = [9, 3, 6, 2, 4, 1, 8, 5, 7]
        for (var k = 0; k < arr.length; k++) {
            // 1. 假设 k 是最小值的下标, 保存在 minIndex
            var minIndex = k
            // 2. 循环会帮我们找到真实最小值的下标, 并保存在变量 minIndex
            for (var i = k + 1; i < arr.length; i++) {
                if (arr[minIndex] > arr[i]) {
                    minIndex = i
                }
            }
            // 3. 交换 真实最小值(下标 minIndex) 和 假设最小值 (k) 的位置
            var temp = arr[k]
            arr[k] = arr[minIndex]
            arr[minIndex] = temp
        }

        console.log('排序后: ', arr)
var arr = [9, 3, 6, 2, 4, 1, 8, 5, 7]
        // 假设这是我们第 11111111111111111111111111111 轮 选择排序
        // 1. 假设 下标0 是最小的值
        var minIndex = 0
        // // 2. 循环遍历数组, 找到真实最小的值对应的下标
        for (var i = 1; i < arr.length; i++) {
            if (arr[minIndex] > arr[i]) {
                minIndex = i
            }
        }
        // 上述循环执行完毕后, 我们一定会得到最小值对应的下标
        // console.log(minIndex)
        // 3. 将 真实最小值(下标minIndex)和假设最小值(下标0)做一个交换
        var temp = arr[0]
        arr[0] = arr[minIndex]
        arr[minIndex] = temp
        console.log('第 11111111111111111111111111111 轮 选择排序后: ', arr)


        // 假设这是我们第 22222222222222222222222222222222 轮 选择排序
        // 1. 假设 下标1 是最小的值 (因为 第一轮结束后, 下标0 真的是最小值)
        var minIndex = 1
        // 2. 循环遍历数组, 找到真实最小的值对应的下标
        for (var i = 2; i < arr.length; i++) {
            if (arr[minIndex] > arr[i]) {
                minIndex = i
            }
        }
        // 环执行完毕后, 我们一定会得到最小值对应的下标
        // console.log(minIndex)
        // 3. 将 真实最小值(下标minIndex)和假设最小值(下标1)做一个交换
        var temp = arr[1]
        arr[1] = arr[minIndex]
        arr[minIndex] = temp
        console.log('第 22222222222222222222222222222222 轮 选择排序后: ', arr)

        // 假设这是我们第 333333333333333333333333333333333333333 轮 选择排序
        // 1. 假设 下标2 是最小的值 (因为 前两轮结束后, 下标0 和 下标1 真的是最小值)
        var minIndex = 2
        // 2. 循环遍历数组, 找到真实最小的值对应的下标
        for (var i = 3; i < arr.length; i++) {
            if (arr[minIndex] > arr[i]) {
                minIndex = i
            }
        }
        // 上述循环执行完毕后, 我们一定会得到最小值对应的下标
        // console.log(minIndex)
        // 3. 将 真实最小值(下标minIndex)和假设最小值(下标2)做一个交换
        var temp = arr[2]
        arr[2] = arr[minIndex]
        arr[minIndex] = temp
        console.log('第 333333333333333333333333333333333333333 轮 选择排序后: ', arr)