05 数组

数据结构
    划分
        1.储存结构(储存对应的数据)
        2.逻辑结构(逻辑的体现)
        3.算法

储存结构的相关内容
    线性结构(有顺序)
        1.数组(顺序表)
        2.线(先进后出)
        3.队列(先进先出)

    非线性结构(没有顺序)
        1.串
        2.链表(单向链表 双向链表)
        3.图(有向图 无向图)
        4.树(二叉树)
        5.hash

    所有的储存结构 必须具备增删改除的方法

数组
    概述:数组是一种数据结构,它里面的存储的数据是有顺序的(又称为顺序表).
    数组储存的数据一般是单一类型的数据,也可以储存多种类型
    数组是一个储存数据比较简易的容器,它可以实现其他的数据结构

数组的申明(引用数据类型)
    使用[]来申明
        数据里面储存的数据采用,分割
    使用new Array关键词申明
        没有指定长度的数组 new后面的首字母要大写        

数组的特性
    下标 从0开始到length-1 可以通过下标来访问对应
    length 长度 (数组里面的值的个数)

数组的遍历
    传统for循环进行遍历
    for in遍历(一般用于遍历对象)//for in来遍历 key 也就是对应数组的下标(一般用于遍历对象 不仅是遍历数组 )
        for(var index in array){//index这个key在array里面
            console.log(array[index])
        }
    for of遍历(专门遍历数组)//遍历的是值
        for (var value of array){//value这个值存在于array中
            console.log(value)
        }

数组的操作方法
    添加方法{add push save set ...}
        push 添加到末尾
            会改变原本的数组
            会返回添加后的长度
        unshift 添加到开头    
    数组的添加方式会返回对应新的长度

删除方法(delete  完全删除    remove  移除软删  pop移除 ...)
    pop 删除最后一个
    shift 删除第一个
    删除方法 添加修改和删除 splice(会影响之前的数组)
    返回对应的删除的元素

修改方法(update replace)
    修改方式是重新赋值,数组没有修改方法

查询相关的方法(select query find search ...)
    indexOf 根据对应的值查询下标(有就返回对应的下标,没有找到就返回-1)
    lastIndexOf 从后往前查找 没有找到返回-1

    sort排序的方法
    默认按照ascii码排序
    如果需要按照对应的值的大小进行排序 自定义比较方法 return a-b就是正序 return b-a就是倒叙
    引用数据类型的比较,比较的是地址值({}!={})
    

 

reverse反转的方法
    var arr1 = [1,2,3,4]
    arr1.reverse()
    console.log(arr1)

不会改变原数组的方法
    join 数组转为字符串(不会影响原本的数组)
    连接(合并多个数组 concat 返回一个新的数组 不会改比那原本的数组)

截取(slice sub...)
    截取slice(不会影响原本的数组)
    
排序算法(常见的排序算法的时间复杂度O(n2))
    1.冒泡排序(相邻的两个相比 交换位置) O(n2)
      

 function(){
            for(var i= 0;i<arr.length-1;i++){
                for(var j = 1;j<arr.length-i;j++){
                    if(arr[j]<arr[j-i]){
                        var temp = arr[j]
                        arr[j] = arr[j-i]
                        arr[j-i] = temp
                    }
                }
            }
            return arr
        }


    
    2.选择排序(选一个值 跟所有的值进行比较 然后这个值不是开始的 就换位置) O(n2)
        //选择排序
      

 function selectorSort(arr){
            for(var i=0;i<arr.length-1;i++){
            //将当前的i值当做最大值
                var max = i
                for(var j = i+1;j<arr.length;j++){
                    //判断当前的最大值小于j下标所在的值
                    if(arr[max]<arr[j]){
                        max = j
                    }
                }
                 //判断当前的最大值不是开始设置的值 要进行位置交换
                if(max != i){
                    var temp = arr[i]
                    arr[i] = arr[max]
                    arr[max] = temp
                }
            }
            return arr
        }

              
    3.快速排序 (冒泡排序的进阶 二分法) O(nlogn)
      

 function quikSort(arr){
            //当我们的数组里面只有一个元素或者一个元素都没有的时候 退出返回这个数组
            if(arr.length <= 1){
            return arr
            }
            //取基数值 取第一个
            var mid = arr[0]
            var left = []
            var right = []
            //for循环 拿出所有的值跟中间值比较
            for(var i=1;i<arr.length;i++){
                arr[i]>=mid?right.push(arr[i]):left.push(arr[i])
            }
            return quikSort(left).concat([mid],quikSort(right))
        }


    4.插入排序
    5.希尔排序(插叙的进阶)
    6.堆排序
    7.桶排序
    8.基数排序
    9.归并排序(大数据排序)
    ...

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值