js--数组

数据结构包括数组、队列、栈、树和图等,数组是线性结构,可通过索引访问。数组具备length属性,支持增删改查操作,如push、pop、splice等。排序算法中,冒泡排序、选择排序和快速排序是常见On^2复杂度的算法,快速排序在小数据量时效率较高。
摘要由CSDN通过智能技术生成

数据结构


数据结构主要是数据的一个存储和逻辑结构的体现。只要能存储数据的一个结构我们就称为数据结构。

相关知识点
  • 数组 又被称为顺序表主要通过索引下标来进行访问(排序)

  • 队列 先进先出的容器

  • 栈 先进后出

  • 树 二叉树

  • 图 对应的指针的指向

  • 链表 通过对应的指针来进行指向

  • 散列表 hash表(hashcode来进行编码的)

  • ...

数组


概述

数组是一种线性的数据结构,他可以存储对应的数据,一般通过对应的索引下标进行数据的访问。在一般情况下我们在数组里面存储的数据类型是一致的。(数组也可以存储不同数据类型的数据)

数组的定义

使用 [] 赋值来定义

使用new关键词来定义

数组的特性
  • 数组具备下标 可以通过下标来访问和赋值操作

  • 数组具备length属性 length重新修改是可行(改大会进行扩容操作 改小会进行删除操作)

数组的遍历
使用普通的循环

使用es5新增的for in关键词

使用es6新增的for of关键词

for in 和 for of的区别
  • for in是用于遍历对象的 他遍历的是对象的key(es5)

  • for of是用于遍历数组的 他遍历的是数组的值 (es6)

数组的相关方法

所有的存储空间都具备增删改查的方法

添加(add push set...)删除 (delete (删除直接回收) remove(删除完还在内存中) pop...)
  • push 添加到后面(返回新的长度)

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

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

  • unshift 添加到第一个 (返回的新的长度)

  • 修改 (replace set...)覆盖

  • 先删再加 splice

  • splice的删除的操作

  • splice的添加

splice返回的是删除的数据组成的数组

查询(query select get...)
indexOf 根据传入的值查询第一次出现的下标

查询索引indexOf 传入对应的元素 返回的是index (如果没有返回-1)

以上方法都会对于原本的数组影响

不影响原本数组的方法(一定有返回值)
数组的拼接 concat方法

slice 截取 返回新的数组

join 将对应的数组转为字符串

位置变换的相关方法

reverse 反转

sort 排序

排序算法

常用的排序算法 (On2)

冒泡排序 (逐层冒泡)

选择排序 (选择一个数跟其他的进行比较)

插入排序 (在插入数据的时候的排序法)

希尔排序 (快速插入排序)

快速排序 (快速冒泡排序 (数据量不大的情况下最快))

归并排序 (大数据处理中最快的排序)

堆排序

桶排序

...

冒泡排序(On^2)

前一个跟后一个比较 俩俩相比 比较完就交换位置 直到所有的内容比较完

functionbubleSort(arr){

//轮数

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

//比较的次数

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

//俩俩比较

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

vartemp=arr[j]

arr[j] =arr[j-1]

arr[j-1] =temp

}

}

}

returnarr

}

选择排序(On^2)

选择一个下标和所有的数进行比较 如果比较完发现这个下标不是之前的下标就换位置

functionselectorSort(arr){

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

//指定max为当前遍历的下标

varmax=i

//max要跟其他的所有未排序比较

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

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

max=j

}

}

//如果最大值不是原本的下标位置就需要交换位置了

if(max!=i){

vartemp=arr[max]

arr[max] =arr[i]

arr[i] =temp

}

}

returnarr

}

快速排序(二分排序)Onlogn

functionquikSort(arr) {

//如果你的数组长度只有一个 或者没有就直接返回这个数组

if (arr.length<=1) {

returnarr

}

//中间值取第一个

varmid=arr[0]

//左右的容器

varleft= [],

right= []

//循环比较

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

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

}

//递归调用无限取中间值

returnquikSort(left).concat(mid).concat(quikSort(right))

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值