冒泡排序与选择排序(不会也要背下来)

99 阅读1分钟

冒泡排序

* 定义:  通过一种算法,将一个乱序的数组,调整为指定顺序的数组(从大到小/从小到大)

    需求:将变量 arr 按顺序排列
        核心:将数组 前一项与后一项 交换位置
    var arr = [9, 3, 6, 2, 4, 1, 8, 5, 7]

    for (var k = 0; k < arr.length - 1; k++) {
        for (var i = 0; i < arr.length -1 -k; i++) {         //找出数组里面所有的值  
            if (arr[i] > arr[i + 1]) {                       //数组里的前一项大于后一项,然后前一项和后一项的交换位置
                var temp = arr[i]
                arr[i] = arr[i + 1]
                arr[i + 1] = temp
            }
        }
    }
    console.log(arr)

选择排序

* 定义:  通过一种算法,将一个乱序的数组,调整为指定顺序的数组(从大到小/从小到大)
    核心:先假设置下标0的数值为最小值,分别语=与后边的数值进行比较,最小的数值会被记录,并与假设的最小值交换位置,

预处理(并非完整代码,方便理解)
    先假设置下标0的数值为最小值

    var minIndex = 0                        //假设最小值第一次为下标1的数字
    for(i = 1; i < arr.length;i++){         //开始循环,如果i = 0,那么就会和自身对比一次,没有意义,所以从下标1的数字开始对比
        if(arr[minIndex] > arr[i]){         //如果当前分支执行, 说明在数组中找到了一个 比假设的最小值要小的  元素
            minIndex = i                    //记录真实的最小值
        }
    }
    var temp = arr[0]                       // 存储 数组下标0的值
    arr[0] = arr[minIndex]                  // 将下标0的值重新赋值     当前数组中最小的值
    arr[minIndex] = temp                    // 将 下标 minIndex 的值 重新赋值为 arr[0] 原本的值     此时就完成了 真实最小值与假设最小值位置的交换0



** 完整代码
    var arr = [9, 3, 6, 2, 4, 1, 8, 5, 7]
    
    for(var k = 0;k < arr.length;k++){
        var minIndex = k                
        for(i = k+1; i < arr.length;i++){
            if(arr[minIndex] > arr[i]){
                minIndex = i
        }
    }
    var temp = arr[k]
    arr[k] = arr[minIndex]
    arr[minIndex] = temp       
    }
    console.log(arr)