数组

数据结构的划分:

        1、存储结构 (存储对应的数据的)

        2、 逻辑结构(逻辑的体现)

        3、算法

存储结构的内容:

        线性结构(有顺序)

        数组 (顺序表)

        栈 (先进后出)

        队列 (先进先出)

        非线性结构 (没有顺序)

        串

        链表 (单向链表 双向链表)

        图 (有向图 无向图)

        树 (二叉树)

        hash

注意:所有的存储结构,必须具备增删改查的方法。

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

数组的声明(引用数据类型):

        1、使用[] 来声明

        2、使用new Array关键词声明,采用new关键词,只要是采用new关键词构建的都是引用数据类型,可以有多个参数

数组的特性:

        1、具备下标,从0开始到length-1可以通过[下标]来访问对应的数组里面的值

        2、具备length 长度(数组里面的值的个数)

数组的遍历:

    1、传统for循环进行遍历:

        var array=new Array()

        for(var i=0;i<array.length;i++){

            console.log(array[i])

        }

    2、for in 遍历 (一般用于遍历对象)

            //for in来遍历 key 也就是对应数组的下标 (一般用于遍历对象 不仅是遍历数组 它还可以遍历其他的对象)

            for(var index in array){        //index这个key在array里面

                console.log(array[index]);

            }

    3、for of 遍历 (专门遍历数组)

            //for of来遍历数组 遍历的是值

            for(var value of array){   //value这个值存在于array中

                    console.log(value);

            }

数组的操作方法:                                            

    1、添加方法(add push save set...)

            push 添加元素到末尾(添加方法,会改变原本的数组,会返回添加后的长度)

            unshift 添加元素到开头(添加方法,会改变原本的数组,会返回添加后的长度)

            注:数组的添加方法返回对应的新的长度

    2、删除方法 (delete(完全删除 硬删) remove(移出 软删)pop 移出...)

            pop 删除最后一个(返回的是删除的元素)

            shift 删除第一个(返回的是删除的元素)

    3、删除 添加 修改方法: splice(传入的参数:开始下标 删除个数) (会影响之前的数组)

            var arr1=[1,2,3,4]

            //删除操作

            var spliceArr=arr1.splice(0,1)//删除完成功内容 一个数组

            console.log(spliceArr);//[1]

            console.log(arr1);//[2,3,4]

            //添加操作

            console.log(arr1.splice(0,0,5));//[]

            console.log(arr1);//[5,2,3,4]

            //修改操作

            console.log(arr1.splice(0,1,1));//删除原本5 将1放到5的位置 5

            console.log(arr1);//[1,2,3,4]

            注:数组的删除方法返回对应的删除的元素

            4、修改方法 (update replace),就是重新賦值 数组没有修改方法

                    arr[2]=0//修改当前第三個元素 下标为2的元素

            5、查询相关的方法(select query find search..)

                indexOf 根据对应的值查询下标(默认查询,从开头查到结尾,有的返回的是第一个查找到的下标,没有返回-1)

var arr1=[1,2,3,1]

//默认查询 从开头查到结尾 返回的是第一个查找到的下标

console.log(arr1.indexOf(1));//0

//根据对应的值返回下标 找不到返回-1

console.log(arr1.indexOf(4));//-1

//indexOf可以规定开头查找的位置

console.log(arr1.indexOf(1,1));//返回3

lastIndexOf 从后往前查找 找到第一个 没有找到返回-1

//从后往前找 找到第一个 默认是从最后开始

console.log(arr1.lastIndexOf(1));//3

//根据对应的值返回下标 找不到返回-1

console.log(arr1.lastIndexOf(4));//-1

//lastIndexOf可以规定开头查找的位置 从下标1开始

console.log(arr1.lastIndexOf(1,1));//返回0

console.log(arr1.lastIndexOf(3,1));//返回-1

sort排序的方法(默认按照ascii码排序):

// sort排序的方法

var arr=[20,18,25,15,1,2]

//传入一个比较的方法 返回排序好的数组

var arr1=arr.sort()//会改变原本的数组

console.log(arr);//[1,15,18,2,20,25]

console.log(arr1);

//引用数据类型的比较 == === 返回的值是一样

console.log(arr==arr1);//true 对应的排序返回的数组其实就原本排序完成的数组

// 如果需要按照对应的值的大小进行排序 自定义比较方法 return a-b 就是正序 return b-a就是倒序

var arr=[20,18,25,15,1,2]

// sort方法默认按照ascii码排序

// 自定义对应比较方法传入 进行排序

arr.sort(function(a,b){

//返回的是a-b 对应的是正序 如果返回的是b-a 那么对应的是倒序

    return b-a

})

console.log(arr);//[1,2,15,18,20,25]

注意:引用数据类型的比较比较的是地址值,值比较的就是对应的值([] ! = [])

reverse反转的方法:

vararr1=[1,2,3,4,5]

arr1.reverse()

console.log(arr1);//[5,4,3,2,1]

join 数组转为字符串(不会影响原本的数组,不会改变原数组的方法)

var arr1 = [5,4,3,2,1]

//join 将数组转为字符串 返回一个字符串 不会更改原本的数组

//join里面的参数为对应的分隔符 默认为,

var str = arr1.join(':')

console.log(str);//5:4:3:2:1

console.log(arr1);//[5,4,3,2,1]

concat 连接方法 (合并多个数组 concat 返回一个新数组 不会改原本的数组)

// 连接方法 concat

var arr1 = [1,2,3]

var arr2 = [4,5,6]

//concat返回一个新的数组

var newArr = arr1.concat(arr2)

console.log(newArr);//[1,2,3,4,5,6]

console.log(arr1);//[1,2,3]

截取 (slice sub..)

截取 slice (不会影响原本的数组)

var arr1 = [1,2,3,4]

//截取多个 返回对应的截取的内容 开始下标  结束下标(不包含结束下标)

var sliceArr = arr1.slice(0,2)

console.log(sliceArr);//[1,2]

console.log(arr1);//[1,2,3,4]

排序算法(常见的排序算法的时间复杂度 O(n2)):

1.冒泡排序(俩俩(相邻的俩个)相比 位置交换)O(n2)

//冒泡排序

function bubleSort(arr){

    //冒泡排序 外层的轮数

    for(var i=0;i<arr.length-1;i++){

        //控制比较的次数

        for(var j=1;j<arr.length-i;j++){

            //j和j-1 俩俩进行比较

            if(arr[j]<arr[j-1]){

                //换位置

                var temp = arr[j]

                arr[j] = arr[j-1]

                arr[j-1] = 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.归并排序(大数据排序)

....

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容