js-day07数组方法&排序

01回顾
知识回顾:
- 程序语句
应用程序 = 程序语句 + 数据结构 + 算法
- 数组基础
- 数组是做什么的?
- 数组创建方式
- 访问数组元素
+ 索引号
- 数组length属性
- 数组遍历
- 数组数据类型Array
- 数组常用方法
- push
- unshift
- pop
- shift
- splice
- sort
- reverse

        - join
        - indexOf
        - includes
        ...

     - 数组内存结构
        内存区域划分
          + 栈区域
              基本数据类型变量
              引用变量
          + 堆区域
              复杂数据类型也叫对象类型

02数组常用方法
1、join
=>作用: 将数组元素按指定字符拼接成字符串返回
=>参数: 指定字符
=>返回值: 返回拼接之后的字符串 | 原数组并没有改变

    2、indexOf
      =>作用: 返回数组元素索引号
      =>参数: 数组元素
      => 返回值: 索引号
                若参数写的元素不存在,则返回-1
                 拓展: 判断元素是否在数组中
                  arr.indexOf(50) == -1
    3、includes
      =>作用:检索元素是否在数组中 
      =>参数:数组的元素
      =>返回值:true | false

03数组遍历常用方法
0、for循环
1、forEach
作用:循环遍历
语法:
arr.forEach(function(item,index,arr){
//item 数组元素 此项必须有,其余可省略
//index 元素索引号
//arr 原数组
})
2、map
作用:遍历 & 返回到新数组中
语法:同上
var newArr = arr.map(function(item,index,arr){
return item + 1
})
返回值:新的数组
3、filter
作用:找数组中满足条件的元素,返回到新数组中
语法:
var newArr = arr.filter(function(item,index,arr){
return item > 1
})
返回值:新的满足条件数组
4、find
作用:找数组中满足条件的第一个元素
语法:
var newArr = arr.find(function(item,index,arr){
return item > 1
})
返回值:元素数据
5、every
作用:判断数组中所有元素是否全都满足条件,如果全部满足返回true,否则false
语法:
var newArr = arr.every(function(item,index,arr){
return item > 1
})
返回值:true | false
6、some
作用: 数组中只要有元素满足指定的条件,只要有一个满足返回true
语法:
var newArr = arr.some(function(item,index,arr){
return item > 1
})
返回值:true | false
7、reduce
作用: 累加求和 & 遍历
语法:
var newArr = arr.reduce(function(s,item,index){
return s + item //返回的是s的新的值 累加完毕后赋值给newArr
},0)
返回值:累加的和
参数:两个
第一个:匿名函数(累加,变量)
第二个0:累加和变量S的初始值

04交换数组中两个数的位置

     * 交换数组元素
     * arr 数组
     * i 索引号
     * k 索引号
     //总结的交换数组元素的公式
    function swap(arr,i,k){ //arr数组 i&k 索引号
        var temp = arr[i];
        arr[i] = arr[k]
        arr[k] = temp;
    }
    function text3(){
        var arr = [12,23,34,566]
        swap(arr,1,3)   //直接使用
        console.log(arr);
    }
    text3()

05排序 (算法)面试题+笔试题

    排序: 将一组无序的数据按从小到大或从大到小顺序排列
    
     [98,86,78,66,82]
     由小到大排序后
     [66,78,82,86,98]

    1、冒泡排序,实现排序的一种算法
        思想: n个数进行冒泡排序, 需要n-1次冒泡,
             每次冒泡操作:相邻两个数,两两比较,前一个数比后一个大,交换位置,一轮比较最大数沉底
            0  第一次冒泡: 比较次数 n-1 -0
            1  第二次冒泡: 比较次数 n-1 -1
            i  第二次冒泡: 比较次数 n-1 -i

         请对下列n个数进行冒泡排序?
         
          //外层循环, n个数进行冒泡排序, 需要n-1次冒泡
          for(var i = 0; i < n-1; i++){
              //内层循环,相邻两个数,两两比较,前一个数比后一个大,交换位置
              for(var j = 0; j < n - 1 -i; j++){
                  if(arr[j] > arr[j+1]){
                      var temp = arr[j]
                      arr[j] = arr[j+1]
                      arr[j+1] = temp
                  }
              }
          }

    //由小到大排序
    function maoSort(){
        var arr = [98,86,79,68,90,82]
        var n = arr.length;
        //外层循环, n个数进行冒泡排序, 需要n-1次冒泡
        for(var i = 0 ;i < n-1;i++){
            //内层循环,相邻两个数,两两比较,前一个数比后一个大,交换位置
            for(var j = 0; j < n - 1 - i;j++){
                if(arr[j] > arr[j+1]){
                    var temp = arr[j];
                    arr[j] = arr[j+1]
                    arr[j+1] = temp;
                }
            }
        }
        console.log('由小到大排序',arr);
    }
    maoSort()

     //由大到小排序
     function maoSort1(){
        var arr = [98,86,79,68,90,82]
        var n = arr.length;
        //外层循环, n个数进行冒泡排序, 需要n-1次冒泡
        for(var i = 0 ;i < n-1;i++){
            //内层循环,相邻两个数,两两比较,前一个数比后一个小,交换位置
            for(var j = 0; j < n - 1 - i;j++){
                if(arr[j] < arr[j+1]){
                    var temp = arr[j];
                    arr[j] = arr[j+1]
                    arr[j+1] = temp;
                }
            }
        }
        console.log('由大到小排序',arr);
    }
    maoSort1()

    2、选择排序
    思想:
     首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置(交换位置)
     再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
     重复第二步,直到所有元素均排序完毕。
    
    //由大到小
    function selectSort() {
        var arr = [86, 79, 98, 68, 90, 82]
        var n = arr.length
        //外层循环,n个数进行n-1次选择排序
        for (var j = 0; j < n - 1; j++) {
            //内层循环
            //核心思想: 在未排序的数中找最大数索引号,与未排序的第一个交换位置
            var maxIndex = j //最大数索引号 j:0
            for (var i = j + 1; i < n; i++) { //不用和自己比较 i= j+1
                if (arr[i] > arr[maxIndex]) {
                    maxIndex = i //maxIndex: 2
                }
            }

            //交换位置
            var temp = arr[j]
            arr[j] = arr[maxIndex]
            arr[maxIndex] = temp
        }
        console.log('由大到小 ',arr);
    }
    selectSort()

    // 由小到大 
    function selectSort1() {
        //外层循环 n个数进行n-1次循环
        var arr = [86, 79, 98, 68, 90, 82]
        var n = arr.length
        for (var j = 0; j < n - 1; j++) {
            //内层循环 从未排序的数中找最小数,找到索引号,与未排序的数中的第一个进行交换位置
            var minIndex = j; //记录最小值的索引号
            //依次让后面的数与最小值进行比较,如果比最小值小,把值赋给min
            for (var i = j + 1; i < n; i++) {
                if (arr[i] < arr[minIndex]) {
                    minIndex = i; // 79<86 最小索引号 = 1
                }
            }
            //交换位置
            var temp = arr[j];
            arr[j] = arr[minIndex]
            arr[minIndex] = temp
        }
        console.log("由小到大排序是",arr);
    }
    selectSort1(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值