• 数组


    一、数组的定义和概念

    <script>
    
        //定义1(字面量定义)
        var array1 = [1,2,3];
        var array2 = [];
        console.log(typeof array1);
        console.log(array1);
    
    
        //定义2(对象创建)
        var arr1 = new Array(); //空数组
        var arr2 = new Array("关羽","张飞","刘备");
        var arr3 = new Array(1,2,3);
        var arr3 = new Array(3);
        console.log(arr1);
        console.log(arr2);
        console.log(arr3);
    
    
    
    </script>
    View Code

    二、数组的操作

     var arr = ["刘备","关羽","张飞"];
    
        //数组长度
    //    console.log(arr);
    //    console.log(arr.length);
    
        //通过索引值获取元素。
        console.log(arr[0]);
        console.log(arr[1]);
        console.log(arr[2]);
        console.log(arr[1222]);
    
        //通过索引值,给元素赋值
        arr[0] = "韩信";
        arr[1] = "萧何";
        arr[2] = "张良";
    
        console.log(arr[0]);
        console.log(arr[1]);
        console.log(arr[2]);
    View Code

    三、数组的遍历

      var arr = ["关羽","张飞","赵云","马超","黄忠"];
    
        //遍历数组就是循环(获取)数组中的每一项
        for(var i=0;i<arr.length;i++){
            //代表的是数组中的每一个元素;
    //        arr[i]
            console.log(arr[i]);
        }
    View Code

    四、数组案例

      //把1-10之间所有的奇数,放到数组中
        //有问题,索引值不是挨着的,而且不是从0开始。
    //    var arr1 = [];
    //
    //    for(var i=1;i<=10;i++){
    //        if(i%2!==0){
    //            arr1[i] = i;
    //        }
    //    }
    //
    //    console.log(arr1);
    
        //重新定义变量作为数组的索引值使用
    //    var arr1 = [];
    //    var j = 0;
    //    for(var i=1;i<=10;i++){
    //        if(i%2!==0){
    //            arr1[j] = i;
    //            j++;
    //        }
    //    }
    //    console.log(arr1);
    
        //数组长度本身开始的时候是0,紧接着每添加进去一个值,数组长度自增1;
        //新的变量j可以用,arr.length替代,因为初始化值也是0,每添加一个元素也是自增1.
        var arr = [];
        for(var i=1;i<=10;i++){
            if(i%2!==0){
                arr[arr.length] = i;
            }
        }
        console.log(arr);
    
    
        //1-10之间能被3整数的数字,存到数组中
        //数组的长度刚好可以作为数组中下一个元素的索引值。
        var arr2 = [];
        for(var i=1;i<=10;i++){
            if(i%3===0){
                arr2[arr2.length] = i;
            }
        }
        console.log(arr2);
    
    #数组大案例
    
       //一、求一组数中的所有数的和和平均值
    //   var arr = [10,20,30];
    //   //计数器思想
    //   var sum = 0;
    //   for(var i=0;i<arr.length;i++){
    //       sum += arr[i];
    //   }
    //   console.log(sum);
    //   var avg = sum/arr.length;
    //   console.log(avg);
    
       //二、求一组数中的最大值和最小值,以及所在位置
        //预热案例:求最大值
    //   var arr = [-10,20,-30,0];
    //   //必须使用数组中的值。(最好是第一个或者最后一个,可以少比较一次)
    ////   var max = 0;
    //   var max = arr[0];
    //   for(var i=1;i<arr.length;i++){
    //       //遍历数组,判断数组中的每一项,如果比max大,赋值给max,否则不用管
    //       if(arr[i]>max){
    //           max = arr[i];
    //       }
    //   }
    //   alert(max);
    
    //    var arr = [10,-20,30,40];
    //   //定义一个最大值和一个最小值,把他们的索引值赋值给固定的两个变量
    //    var maxValue = arr[0];
    //    var minValue = arr[0];
    //    var maxIndex = 0;
    //    var minIndex = 0;
    //
    //    for(var i=1;i<arr.length;i++){
    //        //如果数组中的元素大于我们定义的最大值
    //        if(arr[i]>maxValue) {
    //            //把这个元素赋值给最大值,把他对应的索引值,赋值给maxIndex
    //            maxValue = arr[i];
    //            maxIndex = i;
    //        }
    //      //如果数组中的元素小于我们定义的最小值
    //        if(arr[i]<minValue){
    //            //把这个元素赋值给最小值,把他对应的索引值,minIndex
    //            minValue = arr[i];
    //            minIndex = i;
    //        }
    //    }
    //    console.log(maxValue);
    //    console.log(maxIndex);
    //    console.log(minValue);
    //    console.log(minIndex);
    
       //三、将字符串数组用|或其他符号分割
    //    var arr = ["吕超","赵云","典韦","关羽","马超","张飞"];
    //    var str = arr[0];
    //    var separator = "|";
    //   //为了避免第一个名字前有|,把第一个名字从数组中取出,赋值给str,然后在链接其他名字。
    //    for(var i=1;i<arr.length;i++){
    //        str += separator+ arr[i];
    //    }
    //    console.log(str);
    
    
        //四、将数组中值为0的去掉,不为0的存入一个新数组
    //    var arr = [0,"刘备",0,"关羽",0,"张飞",0];
    //    var newArr = [];
    //    for(var i=0;i<arr.length;i++){
    //        //判断,如果不是0,放入新数组
    //        if(arr[i] !== 0){
    //            newArr[newArr.length] = arr[i];
    //        }
    //    }
    //    console.log(newArr);
    
    
        //五、翻转数组
       //思路:实现方法:1.定义一个新数组,把老数组中的元素从后往前添加到新数组中。
       //思路:实现方法:1.操作原数组,让原数组第一位和最后一个位调换位置,以此类推。
        var arr = ["刘备","关羽","张飞","诸葛亮","马超","黄忠","姜维"];
        console.log(arr);
       //思路:实现方法:1.定义一个新数组,把老数组中的元素从后往前添加到新数组中。
    //    var newArr = [];
       //复杂版
    //    for(var i=0;i<arr.length;i++){
    //        //用新数组的长度作为索引值。  给定数组的最大索引值,然后-去i,因为i自增所以,获取的将是最大索引值到0;
    //        newArr[newArr.length] = arr[arr.length-1-i];
    //    }
    //    console.log(newArr);
       //简单版
    //   for(var i=arr.length-1;i>=0;i--){
    //       //用新数组的长度作为索引值。  给定数组的最大索引值,然后-去i,因为i自增所以,获取的将是最大索引值到0;
    //       newArr[newArr.length] = arr[i];
    //   }
    //   console.log(newArr);
    
       //思路:实现方法:1.操作原数组,让原数组第一位和最后一个位调换位置,以此类推。
        for(var i=0;i<arr.length/2;i++){
            //让前后数组中的元素交换位置。
            var temp = arr[i];
            //前面项和对应的后面项交换位置。(arr.length-1-i = 倒数第i+1项)
            arr[i] = arr[arr.length-1-i];
            arr[arr.length-1-i] = temp;
        }
    
        console.log(arr);
    View Code

    五、冒泡排序

    1.简单版

    #冒泡排序简单版
        var arr = [7,6,5,4,3,2,1];
        //需求:冒泡排序。
        //理论:1.比较轮数n-1。  2.比较次数n-1。  3.符合某个条件交换位置。
        //核心:双重for循环。
        //步骤:
        //1.双重for循环。
        //2.指定轮数和次数
        //3.判断是否符合标准。如果符合标准交换位置。
        console.log(arr);
    
    
        //1.双重for循环。(外循环控制轮数)
        for(var i=0;i<arr.length-1;i++){
            //2.指定轮数和次数(内循环控制次数)
            for(var j=0;j<arr.length-1;j++){
                //3.判断是否符合标准。如果符合标准交换位置。
                    //从小到大排列顺滑,如果前面的比后面的大,那么交换位置。
                if(arr[j] > arr[j+1]){
                    var temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    
        console.log(arr);
    View Code

    2.中级版

     var arr = [7,6,5,4,3,2,1];
        //需求:冒泡排序。
        //理论:1.比较轮数n-1。  2.比较次数n-1。  3.符合某个条件交换位置。
        //核心:双重for循环。
        //步骤:
        //1.双重for循环。
        //2.指定轮数和次数
        //3.判断是否符合标准。如果符合标准交换位置。
        console.log(arr);
    
        //每轮比较少比较一次。(每一轮都会比较出一个最大值,然后后一轮没有必要再比较了,所以没比较一轮,就少比较一次。。。)
        var m = 0;
        var n = 0;
    
    
        //1.双重for循环。(外循环控制轮数)
        for(var i=0;i<arr.length-1;i++){
            //2.指定轮数和次数(内循环控制次数)
            for(var j=0;j<arr.length-1-i;j++){
                //3.判断是否符合标准。如果符合标准交换位置。
                    //从小到大排列顺滑,如果前面的比后面的大,那么交换位置。
                if(arr[j] > arr[j+1]){
                    var temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
                m++;
            }
            n++;
        }
    
        console.log(arr);
        console.log(m);
        console.log(n);
    View Code

    3.终极版

    //    var arr = [7,6,5,4,3,2,1];
        var arr = [1, 2, 3, 4, 5, 6, 7];
        //需求:冒泡排序。
        //理论:1.比较轮数n-1。  2.比较次数n-1。  3.符合某个条件交换位置。
        //核心:双重for循环。
        //步骤:
        //1.双重for循环。
        //2.指定轮数和次数
        //3.判断是否符合标准。如果符合标准交换位置。
        console.log(arr);
    
        //如果比较完备提前结束比较。(判断,如果本次比较没有移动任何元素,那么说明已经比较完成)
        var m = 0;
        var n = 0;
    
    
        //1.双重for循环。(外循环控制轮数)
        for(var i=0;i<arr.length-1;i++){
            //开闭原则。(写在第一个for循环里,是为了,每轮比较初始化bool变量变为true。)
            var bool = true;
            //2.指定轮数和次数(内循环控制次数)
            for(var j=0;j<arr.length-1-i;j++){
                //3.判断是否符合标准。如果符合标准交换位置。
                    //从小到大排列顺滑,如果前面的比后面的大,那么交换位置。
                if(arr[j] > arr[j+1]){
                    var temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                    bool = false;
                }
                m++;
            }
            n++;
            //bool这个变量默认值为true;如果本轮比较有一对元素相互交换位置,那么也不能跳出循环。
            //但是,如果本轮比较没有任何元素相互交换位置,那么说明已经比较完成,可以跳出循环。
            if(bool){
                break;
            }
        }
    
        console.log(arr);
        console.log(m);
        console.log(n);
    View Code
  • 相关阅读:
    Binary Search Tree Iterator 解答
    Invert Binary Tree 解答
    Min Stack 解答
    Trapping Raining Water 解答
    Candy 解答
    Jump Game II 解答
    Implement Hash Map Using Primitive Types
    Gas Station 解答
    Bucket Sort
    HashMap 专题
  • 原文地址:https://www.cnblogs.com/knighterrant/p/9428020.html
Copyright © 2020-2023  润新知