选择排序的简单讲解

53 阅读2分钟
    var arr = [9, 8, 7, 6, 5, 4, 3, 2, 1];
    //         0  1  2  3  4  5  6  7  8

    /**
     *              for 循环第几次执行          假设谁是最小值          内层循环从 ? 开始           找到真实最小值后 和谁交换?
     *  k === 0             1                       [0]                     1                           [0]
     *  k === 1             2                       [1]                     2                           [1]
     *  k === 2             3                       [2]                     3                           [2]
    */


    for (var k = 0; k < arr.length - 1; k++) {
        // 1. 假设最小值的下标
        var minIndex = k

        // 2. 去数组中寻找真实最小值对应的下标
        for (var i = k + 1; i < arr.length; i++) {
            if (arr[minIndex] > arr[i]) {
                minIndex = i
                
            }
        }
        
        // 经过上述循环执行之后, 可以确定 minIndex, 内部一定存储着最小值对应的下标

        // 3. 交换 假设最小值和真实最小值的位置
        var temp = arr[k]
        arr[k] = arr[minIndex]
        arr[minIndex] = temp
       
    }

    console.log('选择排序后的数组: ', arr)







    // // 1. 假设最小值的下标
    // var minIndex = 0
    // // 2. 去数组中寻找真实最小值对应的下标
    // for (var i = 1; i < arr.length; i++) {
    //     if (arr[minIndex] > arr[i]) {
    //         minIndex = i
    //     }
    // }

    // // 经过上述循环执行之后, 可以确定 minIndex, 内部一定存储着最小值对应的下标
    // // console.log(minIndex) // 8

    // // 3. 交换 假设最小值和真实最小值的位置
    // var temp = arr[0]
    // arr[0] = arr[minIndex]
    // arr[minIndex] = temp

    // console.log('第 1 次选择排序后: ', arr) // [1, 8, 7, 6, 5, 4, 3, 2, 9]






    // // 1. 假设最小值的下标
    // var minIndex = 1
    // // 2. 去数组中寻找真实最小值对应的下标
    // for (var i = 2; i < arr.length; i++) {
    //     if (arr[minIndex] > arr[i]) {
    //         minIndex = i
    //     }
    // }

    // // 经过上述循环执行之后, 可以确定 minIndex, 内部一定存储着最小值对应的下标

    // // 3. 交换 假设最小值和真实最小值的位置
    // var temp = arr[1]
    // arr[1] = arr[minIndex]
    // arr[minIndex] = temp

    // console.log('第 2 次选择排序后: ', arr) // [1, 2, 7, 6, 5, 4, 3, 8, 9]





    // // 1. 假设最小值的下标
    // var minIndex = 2
    // // 2. 去数组中寻找真实最小值对应的下标
    // for (var i = 3; i < arr.length; i++) {
    //     if (arr[minIndex] > arr[i]) {
    //         minIndex = i
    //     }
    // }

    // // 经过上述循环执行之后, 可以确定 minIndex, 内部一定存储着最小值对应的下标

    // // 3. 交换 假设最小值和真实最小值的位置
    // var temp = arr[2]
    // arr[2] = arr[minIndex]
    // arr[minIndex] = temp

    // console.log('第 3 次选择排序后: ', arr)