简单了解 js 数组基本操作 与 冒泡/选择排序

86 阅读4分钟

数组基本方法 与冒泡排序和选择排序

  • 冒泡排序

    • 就是让是让数组中的连续的两个元素进行比较 数值大的和数值小的进行交换 直到完成数组排列 例
      • var a = [5, 2, 3, 4, 1, 6, 9, 7, 15] // 随便定义的数组 
             for (var i = 0; i < a.length; i++) { //外层循环的次数主要由数组的长度决定 因为你外层循环一次 可以找到一个最大值(相对某轮) 最后一次可以不比较 因为最后一个元素只能在最后剩下的位置里面
                 for (var s = 0; s < a.length; s++) {
                     if (a[s] > a[s + 1]) {
                         var flag = a[s];
                         a[s] = a[s + 1];
                         a[s + 1] = flag;
                     }
                 }
             }
         }
         console.log(a)//这时 已经完成排序
         
         //优化1
             for (var i = 0; i < a.length - 1; i++) {
                 for (var s = 0; s < a.length; s++) {
                     if (a[s] > a[s + 1]) { //外层循环没执行一轮 就可以得到一个最大值 也就是说该元素的位置是可以确定的 也就是说位置确定的元素 可以不参与后续的比较 因此可以得到优化2
                         var flag = a[s];
                         a[s] = a[s + 1];
                         a[s + 1] = flag;
                     }
                 }
             }
         }
         console.log(a) // 结果与上面代码一致
        
         //优化2
             for (var i = 0; i < a.length; i++) {
                 for (var s = 0; s < a.length -1 - k; s++) {//每排一次 就确定一个位置 后续循环不需要继续作比较
                     if (a[s] > a[s + 1]) {
                         var flag = a[s];
                         a[s] = a[s + 1];
                         a[s + 1] = flag;
                     }
                 }
             }
         }
         console.log(a)
        
  • 选择排序 *

    •   for (var i = 0; i < a.length - 1; i++) {
                  var min = i;//每次 循环改变min的值 min 为我们要排列的顺序 也就是假设的最小值所在的位置
                  for (var k = i + 1; k < a.length; k++) {// 因为当k = i的时候 它们表示同一个位置 也就是没意义的比较 ---  
                      if (a1[k] < a1[min]) {
                          min = k; //而内循环执行一轮 可以得到数组内的一个切实的最小值 此时 把该元素的位置保存
                      }
                  } //内层循环结束一轮 min都会保存一个最小值的位置
                  //我们只需要把它和假设的最小值所在的位置做交换 就可以在该位置得到一个最小值
                  var sss = a1[i];
                  a1[i] = a1[min];
                  a1[min] = sss;
              }
              return a1
          }
      console.log(a)
      

数组常用方法

以下方法为会改变原数组

  • push() 语法 数组.push() 属性 在数组最后一个位置插入一个数据 该方法会改变原数组 返回改变后数组的长度

  • pop() 属性 删除数组的最后一个元素 该方法也会改变原数组、 返回数组长度

  • unshift() 属性 在数组的第0个位置上添加一个数据 或者多个元素 甚至一个数组 但是添加数组的时候 该方法是吧数组的值添加到原数组内 该方法会改变原数组 放回数组长度

  • shift()方法 删除数组第一个位置 的元素并返回改变后数组的长度

  • reverse()方法 属性 将原数组变成倒序 原数组改变

  • splice() 属性 向数组中添加,或从数组删除,或替换数组中的元素,然后返回被删除/替换的元素。 参数 splice(start,num,data1,data2,…); 所有参数全部可选。第一个参数是小标,第二个是删除的长度,第一个参数可以为负数 splice(star, 长度) 规定从某一个位置开始删除 某一长度的数据

  • sort()方法 将原数组排序 可以接收参数 不接参数的时候按UniCode编码排序 原数组改变 接收参数为函数 函数可以有两个参数fn(a, b) 若返回值为a - b 则原数组为从小到大若是 b - a 原数组将按照从大到小的顺序排列

以下为不会改变原数组的 数组方法

  • slice; concat; join; indexOf; lastIndexOf
  • concat() 属性 合并数组 并放回合并后的新数组 该方法对多个数组有效 该方法不会改变原数组
  • join() 属性 将数组转换为字符串返回 并用指定的符号分隔 join('分隔符') 没有规定符号的情况下 默认使用逗号作为分隔符
  • slice() 对数组截取并返回截取部分(开始截取的位置,结束的位置) 可从已有的数组中返回选定的元素。该方法接收两个参数slice(start,end),strat为必选
  • indexOf() 属性 根据指定的数据,从左向右,查询在数组中出现的位置,如果不存在指定的数据,返回-1,找到了指定的数据返回该数据的索引
  • lastIndexOf 属性 根据指定的数据,从右向左,lastIndexOf() 方法可返回一个指定的元素在数组中最后出现的位置,从该字符串的后面向前查找。如果不存在指定的数据,返回-1,找到了指定的数据返回该数据的索引