day05数组

数据结构

划分

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

逻辑结构(逻辑的体现)

算法

存储结构的相关的内容

线性结构(有顺序)

数组 (顺序表)

栈 (先进后出)

队列 (先进先出)

非线性结构 (没有顺序)

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

图 (有向图 无向图)

树 (二叉树)

hash

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

数组

概述:

数组是一种数据结构,它里面的存储的数据是有顺序的(又称为顺序表)。数组它里面存储的数据一般

情况下是单一类型的数据。但是我们也可以存储多种类型。数组是一个存储数据比较简易的一个容器,

所以它可以实现其他的相关数据结构。

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

使用[] 来声明

使用new Array关键词声明

//第一种声明

var array = [1, 2, 3] //数据里面存储的数据采用,分割

console.log(typeof array) //object 数组是引用数据类型

console.log(array)数组的特性

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

length 长度(数组里面的值的个数)

数组的遍历

传统for循环进行遍历

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

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

数组的操作(方法)

添加方法(**add push save set...)**

push 添加到末尾

unshift 添加到开头

//第二种声明方式 采用new关键词 反是采用new 关键词构建的都是引用数据类型

var array = new Array() //没有指定长度的数组

//当你传递一个参数的时候 就是构建对应的长度的数组

var array1 = new Array(10) //new 后面的方法的首字母要大写 指定长度为10的数组

console.log(array1);

//当你传递多个参数的时候 就是将对应的参数放入对应的数组内

vararray2=newArray(1,2,3,4)

console.log(array2);

vararray=newArray()

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

console.log(array[i])

}

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

象)

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

console.log(array[index]);

}

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

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

console.log(value);

}

//添加方法 会改变原本的数组

//添加方法 会返回添加后的长度

// push方法 添加元素到末尾

vararr=[1,2]

varv=arr.push(3,4)//在末尾追加3 4

console.log(v);

console.log(arr.length);//4

console.log(arr);//[1,2,3,4]**数组的添加方法返回对应的新的长度**

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

pop 删除最后一个

shift 删除第一个

删除方法 添加修改和删除 splice(会影响之前的数组)

返回对应的删除的元素

修改方法 (**update replace)**

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

indexOf 根据对应的值查询下标(有就返回对应的下标 没有返回**-1)**

// unshift 添加到开头

varm=arr.unshift(5,6,7)

console.log(m);

console.log(arr.length);//7

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

//删除方法 删除末尾的第一个 返回的是删除的元素

console.log(arr.pop());//4

console.log(arr);//[5,6,7,1,2,3]

//shift 删除 删除开头的第一个

console.log(arr.shift());//返回5

console.log(arr);//[6,7,1,2,3]

vararr1=[1,2,3,4]

//开始下标 删除个数

//删除操作

varspliceArr=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]

//他的修改就是重新賦值 数组没有修改方法

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

vararr1=[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**

sort**排序的方法**

默认按照ascii码排序

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

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

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

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排序的方法

vararr=[20,18,25,15,1,2]

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

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

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

console.log(arr1);

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

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

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

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

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

arr.sort(function(a,b){

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

// return a-b

returnb-a

})

console.log(arr);//[1,2,15,18,20,25]**reverse****反转的方法**

不会改变原数组的方法

join 数组转为字符串(不会影响原本的数组)

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

concat

截取 (**slice sub..)**

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

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

arr1.reverse()

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

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

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

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

varstr=arr1.join(':')

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

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

// 连接方法 concat

vararr1=[1,2,3]

vararr2=[4,5,6]

//concat返回一个新的数组

varnewArr=arr1.concat(arr2)

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

console.log(arr1);//[1,2,3]**排序算法(常见的排序算法的时间复杂度** **O(n2)****)**

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

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

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

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

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

varsliceArr=arr1.slice(0,2)

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

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

//冒泡排序

functionbubleSort(arr){

//冒泡排序 外层的轮数

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

//控制比较的次数

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

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

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

//换位置

vartemp=arr[j]

arr[j]=arr[j-1]

arr[j-1]=temp

}

}

}

returnarr

}

//选择排序

functionselectorSort(arr){

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

//将当前的i值当做最大值

varmax=i

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

//判断当前的最大值小于j下标所在的值

if(arr[max]<arr[j]){

max=j

}

}

//判断当前的最大值不是开始设置的值 要进行位置交换

if(max!=i){

vartemp=arr[i]

arr[i]=arr[max]

arr[max]=temp

}

}

returnarr

}

//快速排序

functionquikSort(arr){//当我们的数组里面只有一个元素或者一个元素都没有的时候 退出返回这个数组

if(arr.length<=1){

returnarr

}

//取基数值 取第一个

varmid=arr[0]

varleft=[]

varright=[]

//for循环 拿出所有的值跟中间值比较

for(vari=1;i<arr.length;i++){

arr[i]>=mid?right.push(arr[i]):left.push(arr[i])

}

returnquikSort(left).concat([mid],quikSort(right))

}

4.插入排序

5.希尔排序(插入排序的进阶)

6.堆排序

7.桶排序

8.基数排序

9.归并排序(大数据排序)

....

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、数组定义和访问 1.1数组概念:数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致。 1.2数组的特...
    小陈工阅读 249评论 0 1
  • js中数组的方法种类众多,有ES5之前版本中存在的,ES5新增,ES6新增等;并且数组的方法还有原型方法和从obj...
    小碳儿阅读 340评论 0 0
  • 1.用数组实现输入10个成绩,求总分,最高分,最低分 vararr=newArray(60,70,80,90,30...
    散落_阅读 1,513评论 0 1
  • 1.用js实现随机选取10~100之间的10个数字,存入一个数组,并排序 //要是获取不重复的,则对随机数...
    persistlu阅读 5,672评论 0 0
  • 1、join() join(separator): 将数组的元素组起一个字符串,以separator为分隔符,省略...
    泽玲_d7fb阅读 570评论 0 1