## 认识数组

     我们编程过程中需要一个可以存储大量数据的结构 -> 数组。
     数组的概念:存储大量数据。可以使用一个变量名,存储大量的数据。

    1、声明数组方法

        <1>通过new运算符创建数组
        参数的部分:传入你想存储在数组中的元素(JS弱引用,数组中可以存储任意的数据类型)
        【注】元素:数组中存储的每一个值,叫做数组的元素。
        <2>省略new运算符创建数组
        以上两种创建数组的方法都不常用。
        <3>直接通过数组常量赋值。JS中数组就是通过 []表示。
 

var arr = new Array(100, true, "hello");
            alert(arr);
            var arr = Array(100, true, "hello");
            alert(arr);
            var arr = [10, true, "hello"];
            alert(arr);

        重点:使用 new Array  Array 创建数组的时候
            当参数是数字,并且只有这一个参数的时候,生成一个对应长度的空数组。
        

var arr = new Array(10);
                /*var arr = Array(10);
                alert(arr);*/
    
                var arr = [10, 20, 30];
                alert(typeof arr); //object

 
        访问数组的属性:
            arr.length  输出数组中元素的个数
             数组的元素个数  arr.length
      【注】length属性,不是只读的,可以设置。
       访问数组中的元素:
            通过元素的下标访问,【注】元素下标从0开始的。
           
       【注】循环和数组是绝配。
        Math.random()  随机0~1之间的任意数 [0, 1)

 2.遍历

    for循环
    for...in 快速遍历/快速枚举法  直接从头到尾直接遍历每一个元素。

for(var i in arr){
    document.write(arr[i]);
}
//【注】在快速遍历的时候,不要对原数组中的元素个数进行修改。

 3.数组的方法     

     系统提供了大量的数组的函数
     栈结构  通过数组的方法模拟一个栈结构。
     栈结构特点:先进后出
     push  pop
     通过数组的方法:元素只能从同一头出,同一头进。

push
        格式:数组.push(参数1, 参数2...);
        功能:给数组的末尾添加元素。
        返回值:添加完元素以后,数组的长度

        pop
        格式:数组.pop()
        功能:从数组的末尾取一个元素下来
        返回值:取下的元素

        队列结构
        特点:先进先出
        通过数组的方法:从尾部插入元素,从头部取下元素。
        push  shift

shift()
        格式:数组.shift()
        功能:从数组头部取元素下来。
        返回值:从数组头部取下的元素。
            
    unshift 从数组的头部插入元素
        格式:数组.unshift(元素...);
        功能:从数组头部插入元素
        返回值:插完元素以后数组的长度。

 

concat()
    格式:数组.concat(数组1, 数组2, 变量/常量...);
    功能:将这些数组中的元素,全部合并成一个新数组。不会修改原数组。
    返回值:返回值就是生成的新数组。
concat() 没有传入参数,直接生成一个一模一样的新数组,返回。

slice()
    格式:数组.slice(start, end);
    功能:获取[start, end)下标范围内的元素,生成新数组,不会修改原数组。
    返回值:生成的新数组。

splice()         可以实现增、删、改
    格式:数组.splice(start, length, 元素1, 元素2 .....);
    参数:第一个参数,开始截取的下标
          第二个参数,截取的元素长度
          第三个参数往后,在开始位置插入的元素

join()   数组--> 字符串
    格式:数组.join(拼接符);
    功能:将数组中每一个元素,通过拼接符,拼接成一个字符串
    返回值:字符串

reverse()  逆序
    功能:对原数组逆序
    格式:数组.reverse()

sort()
    【注】默认是按照字符串升序排序
    参数:是一个函数
        function(value1, value2){
            return value1 < value2;
        } 降序排列
            function(value1, value2){
                return value1 > value2;
        } 升序

    var arr = [1, 20, 15, 10, 5];
    arr.sort();
    alert(arr); //1,10,15,20,5  它会拿每一个数的第一个数字进行比较,一旦比较出大小,那么之后的数字不会再比较了

 4.冒泡算法

  冒泡排序:
            规则:前后两两进行比较,如果符合条件,交换两个数的位置。
            特点:每一轮比较,都能找出一个较大的数,放在正确的位置。
  第一轮:五次
                    9, 8, 7, 6, 5, 4
                    8, 9, 7, 6, 5, 4
                    8, 7, 9, 6, 5, 4
                    8, 7, 6, 9, 5, 4
                    8, 7, 6, 5, 9, 4
                    8, 7, 6, 5, 4, 9

                第二轮:四次
                    8, 7, 6, 5, 4
                    7, 8, 6, 5, 4
                    7, 6, 8, 5, 4
                    7, 6, 5, 8, 4
                    7, 6, 5, 4, 8

                第三轮:三次
                    7, 6, 5, 4
                    6, 7, 5, 4
                    6, 5, 7, 4
                    6, 5, 4, 7

                第四轮:二次
                    6, 5, 4
                    5, 6, 4
                    5, 4, 6

                第五轮:一次
                    5, 4
                    4, 5

            比较轮数 = 数组长度 - 1
            数组长度 = 比较的轮次 + 每轮次数
            每轮次数 = 数组长度 - 比较的轮次
  

var arr = [9, 8, 7, 6, 5, 4];
            //比较轮数:
            for(var i = 0; i < arr.length - 1; i++){
                //每一轮比较的次数
                for(var j = 0; j < arr.length - (i + 1); j++){
                    if(arr[j] > arr[j + 1]){
                        var tmp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = tmp;
                    }
                }
            }

 5.选择排序

 选择排序 --- 打擂台法
 规律:通过比较首先选出最小的数放在第一个位置上,然后在其余的数中选出次小数放在第二个位置上,依此类推,直到所有的数成为有序序列。'';

 结论:每一轮都能找到一个较小的数,放在正确的位置。
            第一轮:
                9, 8, 7, 6, 5, 4
                8, 9, 7, 6, 5, 4
                7, 9, 8, 6, 5, 4
                6, 9, 8, 7, 5, 4
                5, 9, 8, 7, 6, 4
                4, 9, 8, 7, 6, 5

            第二轮:
                    9, 8, 7, 6, 5
                    8, 9, 7, 6, 5
                    7, 9, 8, 6, 5
                    6, 9, 8, 7, 5
                    5, 9, 8, 7, 6

             第三轮:
                       9, 8, 7, 6
                       8, 9, 7, 6
                       7, 9, 8, 6
                       6, 9, 8, 7
             第四轮:
                          9, 8, 7
                          8, 9, 7
                          7, 9, 8

             第五轮:
                             9, 8
                             8, 9

             比较轮数 = 数组长度 - 1
             比较的次数 = 数组长度 - 当前轮数

var arr = [9, 8, 7, 6, 5, 4];
            for(var i = 0; i < arr.length - 1; i++){
                for(var j = i + 1; j < arr.length; j++){
                    if(arr[i] > arr[j]){
                        var tmp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = tmp;
                    }
                }
            }