【七】冒泡排序、选择排序、数组的操作方法、数组塌陷

92 阅读2分钟

01 冒泡排序

原理:循环遍历数组

当前单元和下一个单元进行数据比较,按照从小到大排序(即当前单元小于下一个单元)

主要操作:如果当前单元大于下一个单元,将交换两个单元存储的数据

一次循环结束,会讲一个最大值存储到数组末位

核心优化:

内层优化:

   1、 当前单元 和 下一个单元 进行 数据比较

        最后一个单元 没有 下一个单元 进行 数据比较

        内层循环 是 从 数组的第一个单元 循环至 循环循环的 倒数第二个单元

    2, 上一次排序排序出最大值 不参与 下一次的循环排序

    也就是

    第一次 是 1-9 单元排序 少排序 0 个单元

    第二次 是 1-8 单元排序 少排序 1 个单元

    第三次 是 1-7 单元排序 少排序 2 个单元

    第四次 是 1-6 单元排序 少排序 3 个单元

    .....

    少排序的单元个数 0 1 2 3 4...

    正好对应 外层循环变量的数值

外层优化:

    1、 最后一个单元 没有 单元 进行 数据比较

    也就是 n 个 单元 只需要 循环 n-1 次 就可以 完成排序


<script>
        var arr = [10, 20, 30, 40, 31, 53, 22, 50]; 
        var n = 11; arr.push(n); 
        // console.log(arr); 
        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); 
 </script>

02 选择排序

原理:

每次使用变量存储 起始循环单元的索引下标

使用 变量中存储的索引下标 对应的数值数值

和 之后的其他单元的数据数值进行比较

如果 之后循环单元数据数值 小于 变量中存储索引下标 对应的数据数值

变量 存储 循环单元的索引下标

循环结束 变量中存储本次循环 存储最小值单元的索引下标

如果 变量储存的索引下标 不是 起始单元的索引下标

交换两个单元存储的数据数值

每次循环 会将 最小值 存储到数组的起始位置

多次循环 完成 整个数组的排序

    <script> 
        var arr = [9, 3, 6, 2, 4, 1, 8, 5, 7]; 
        for(var k = 0; k < arr.length; k++){ 
            var minIndex = k; 
            for(var 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); 
   </script>

03 数组的操作方法

数组的操作方法.png

04 数组塌陷

<script> 
    var arr = [1, 2, 3, 4, 5, 6]; 
    for(var i = 0; i < arr.length; i++){ 
        arr.splice(i, 1); 
        i--; ***** 
    } 
    console.log(arr);
</script>