JS冒泡排序和选择排序

113 阅读2分钟

42、冒泡排序

属于数组排序的算法之一
 *    其实就是通过一种算法,将一个乱序的数组,调整为指定顺序的数组(从大到小/从小到大)
 * 
 * 什么是算法?
 *    解决某一个问题最简单的方式/最高效的方式
 * 
 * 从1-10万,这组数字中,少了一个数字,要求我们找出来
 *    常规写法:后一位 - 前一位 如果差值 === 2 那么就找出来了
 * 
 *    将1-10万分为两组 1~5万 5万零一~10万 然后去找这两组数字中那一组的数量不够万,找到之后将这组再次一分为二   
  • 方法1:
    var arr = [9, 3, 6, 2, 4, 1, 8, 5, 7]
    //         0  1  2  3  4  5  6  7  8
    console.log('原始数组:', arr)
    for(var k = arr.length - 2; k >= 0; k--) {
      console.log('k的值为', k)
      for (var  i = 0; i <= k; i++) {
        console.log(arr[i] , arr[i+1])
        if(arr[i] > arr[i+1]) {//相邻的两个数比较,前面的值>后面的值,那么前边的值往后挪 (从小到大排列)
          var temp = arr[i+1] 
          arr[i+1] = arr[i] 
          arr[i] = temp
        }
      }
    }
    console.log('冒泡排序后的数组:', arr)
  • 方法2:
    var arr = [9, 3, 6, 2, 4, 1, 8, 5, 7]
    console.log('原始数组:', arr)
    for (var k = 0; k < arr.length - 1; k++) {//控制内层循环的次数
      for (var i = 0; i < arr.length - 1 - k; i++) { //arr.length - 1 - k减少多余的循环操作
        if(arr[i] > arr[i+1]) {//相邻的两个数比较,前面的值>后面的值,那么前边的值往后挪 (从小到大排列)
          var temp = arr[i+1] 
          arr[i+1] = arr[i] 
          arr[i] = temp
        }
      }
    }
    console.log('冒泡排序后的数组:', arr)

43、选择排序

    var arr = [9, 3, 6, 2, 4, 1, 8, 5, 7]
    //         0  1  2  3  4  5  6  7  8
    console.log('原始数组:', arr)
    /**
     * *             第几次循环   假设谁是最小值   和谁交换  内层循环从几开始
     * 
     * *   k === 0       1              0            0              1
     * *   k === 1       2              1            1              2
     * *   k === 2       3              2            2              3
     * */ 
    for(var k = 0; k < arr.length; k++) {
      var minIndex = k //假设当前最小值的下标 为k
      for (var i = k + 1; i <= arr.length; i++){
        // console.log(arr[i])
        if (arr[minIndex] > arr[i]) { //如果当前分支执行,说明在数组中找到了一个比假设的最小值要小的元素
          minIndex = i
        }
      }
      var temp = arr[k]
      arr[k] = arr[minIndex]
      arr[minIndex] = temp
    }
    console.log('选择排序后的数组' ,arr)