12.28---02选择排序

69 阅读1分钟

选择排序

     var arr = [9, 3, 6, 2, 4, 1, 8, 5, 7]
                0  1  2  3  4  5  6  7  8
    console.log('原始数组: ', arr)

第一轮选择排序

    var minIndex = 0    // 假设当前最小值的下标 为 0
    for (var i = 1; i < arr.length; i++) {
        if (arr[minIndex] > arr[i]) {   // 如果当前分支执行, 说明在数组中找到了一个 比假设的最小值要小的  元素
            minIndex = i
        }
    }

上边的 for 循环执行完毕后, minIndex 记录的就是 真实的最小的值的下标 此时交换 真实最小值 与 我们假设的最小值

      var temp = arr[0]       // 存储 数组下标0的值
    arr[0] = arr[minIndex]  // 将 下标0的值重新赋值     当前数组中最小的值
    arr[minIndex] = temp    // 将 下标 minIndex 的值 重新赋值为 arr[0] 原本的值     此时就完成了 真实最小值与假设最小值位置的交换

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

第二轮选择排序

     var minIndex = 1    // 假设当前最小值的下标为 1
     for (var i = 2; i < arr.length; i++) {
         if (arr[minIndex] > arr[i]) {
             minIndex = i
        }
    }

for 循环执行完毕 minIndex 就是真实的最小值的下标, 此时交换 真实最小值与假设的最小值的位置即可

  var temp = arr[1]
    arr[1] = arr[minIndex]
    arr[minIndex] = temp

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

第三轮选择排序

     var minIndex = 2    // 假设当前最小值的下标为 2
     for (var i = 3; i < arr.length; i++) {
         if (arr[minIndex] > arr[i]) {
            minIndex = i
       }
     }
     

for 循环执行完毕 minIndex 就是真实的最小值的下标, 此时交换 真实最小值与假设的最小值的位置即可\

     var temp = arr[2]
     arr[2] = arr[minIndex]
    `arr[minIndex] = temp

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