首页 > 其他分享 >数组

数组

时间:2022-08-14 21:56:59浏览次数:43  
标签:arr 下标 log 数组 var console

数据结构

数据的结构(逻辑结构 存储结构 算法)

存储结构(数据存储的结构方式)**

线性结构

数组(顺序表)

队列

链表

非线性结构

hash(散列表)

只要是能存储数据的容器,必须具备增删改查的方法

数组概述

数组是固定一类数据的存储组合(一般情况下数组里面的数据类型一致)

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

1.使用[ ]声明

数据之间使用 , 分隔

var arr = [ 1,2,3]
[1,2,3]==[1,2,3]    //false
//引用数据类型比较是地址的比较,只有常量才是固定地址(值类型是常量)

2.使用new关键词声明(对象)

var arr = new Array(10)   //10 是长度 不写参数则表示没有长度,默认为0
//length属性访问对应的长度
var arr = [1,2,3]
arr.length=11  //设置数组长度
console.log(arr[0])      //输出数组的第一个内容
console.log(arr["0"])   //输出数组的第一个内容,说明可以写入字符串形式
//单个数据表示长度,多个数据表示数组内容
//相当于开了10个空间,但是没有进行赋值,默认是undefined
数组的赋值
arr [2] = 10  //让第三个元素为10


var arr= new Array()
for(i=0;i<10;i++){
   arr[i] = Math.random()  //返回[0,1)之间的值
}
console.log(arr)
//但其实每个数出现的概率不一样
数组遍历

for循环遍历(利用顺序表的特点 有序)

var arr = [1,6,5,8]
for(var i=0;i<arr.length;i++){
   console.log(arr[i])
}

for in遍历(对象 下标 迭代器next)

var arr = [1,6,8,9,0]
for(var i in arr){   //i表示的是下标
   console.log(arr[i])
}

for of 遍历(只能遍历数组)(数组 迭代器)

相当于一个一个名字的数,直到数到没有名字,靠迭代器实现

var arr = [1,6,8,9,0]
for(var value of arr){  //value 表示的是值
console.log(value)
}

对数组能进行遍历操作的原因**:数组是一个顺序表,依赖于下标实现

数组的方法

添加(add push append)

栈方法(先进后出,后进先出)

将内容追加到最后面 push方法 返回值 长度

var arr= [1,2]
arr.push(3)
console.log(arr) //arr[1,2,3]

队列方法(先进先出,后进后出) 返回值 长度

将内容追加到最前面 unshift方法

var arr = [1,2,3]
arr.unshift(4)
console.log(arr) //arr[4,1,2,3]

删除(delete 硬删 remove 软删)

栈方法 pop方法(删除最后面一个)返回值 被删除的那个值

var arr= [1,2,3]
arr.pop()  //一般不写下标,默认删除最后一个
console.log(arr)  //[1,2]

队列方法 shift方法(删除第一个) 返回值 被删除的那个值

var arr = [1,2,3]
arr.shift()  //不写下标,默认删除第一个
console.log(arr) //[2,3]

修改 (replace 替换 update 更新

反转 reverse方法(将最后一个变到第一个 一个个对应的换位置)

var arr= [2,3,4,6,8]
arr.reverse()   //返回反转后的数组,其实就是原本的数组
console.log(arr) //[8,6,4,3,2]
//arr .reverse 和 arr 是一个东西,即对arr.reverse 进行添加删除等操作,arr也会跟着改变,反转后产生的数组就是进行反转操作后打印出的数组

排序 sort 方法 默认情况根据第一个字符的ASCII码进行排序(ASCII码排序)

sort其实就是一个高阶函数 高阶函数就是里面用函数作为参数的函数

 var arr = [3,4,1,2,6,5]
arr.sort()  //返回一个数组,这个数组就是排序好的数组
console.log(arr)
var arr1 = [11,4,5,12,21]
arr.sort()
console.log(arr1) //[11,12,21,4,5]
var arr1= [11,4,5,31,23]
arr.sort(function(a,b){
  //1 和 -1 进行大小区分和排序规则
   return a-b  //a-b是正序 b-a是倒序
})console.log(arr1)

连接 concat()方法 追加数据, 返回一个新数组, 不改变原数组

var arr = [1,2,3]
var arr1 = [4,5]
var arr2 = [6,7]
//contact连接 把多个数组连接成一个数组,返回...扩展运算符(必须是数组)(...表明可以写任意个,不止三个)
var newArr = arr.contact(arr1,arr2)
console.log(newArr)

截取 slice()方法 不修改原数组, 将原数组中的指定区域数据提取出来,返回新的数组

var arr = [1,2,3]
var sliceArr = arr.slice() //全切
console.log(sliceArr)
var sliceArr1 = arr.slice(0)//从下标为0开始切到最后
console.log(sliceArr1)//[1,2,3]
var sliceArr2 = arr.slice(4) //当不存在这个下标值时,会返回一个空数组
console.log(sliceArr2)//空数组
var sliceArr3 = arr.slice(1,3)//不包含结束的下标,包含开始的下标
console.log(sliceArr3)//[2,3]

contact和slice方法返回的数组跟原本的数组不是一个对象,但是里面的值或者对象的地址是一样的

splice方法

会影响之前的数组 删除 截取

var arr= [12,15,18]
//参数 1.开始位置   2.删除的个数(可以不写,默认是数组的长度length)3加入的数值
var newArr = arr.splice(0) ;
console.log(newArr);//[12,15,18]
console.log(arr);//[]
var arr1=[12,15,18]
var newArr1 = arr1.splice(1,1)
console.log(arr1) //[12,18]
console.log(newArr1)//[15] 获取删除的内容,其实就是截取里面的内容

查询****

堆和栈

栈:自动分配内存空间,系统自动释放,基本类型的值和引用类型(object)的地址

堆:动态分配的内存,大小不定,也不会自动释放。存放引用类型的值。

排序算法

1.冒泡排序

function bub (arr){
   //遍历数组
   for(var i=1;i<arr.length;i++){
       //遍历没有进行比较的值
       for(var j=0;j<arr.length-i;j++){
           //相邻的两个值进行比较
           if(arr[j]>arr[j+1]){
               var temp = arr[j]
               arr[j] = arr[j+1]
               arr[j+1] = temp
          }
      }
  }return arr
}

2.选择排序(选择最大值的下标(或者最小值)进行比较的排序)

逻辑原理:一共进行两层循环,先假定最小值(或最大值)的下标为外层循环的第一个数的下标,然后在第二层循环中遍历所有的数值,找到最小的值(或最大的值)所在下标,记住该下标,(此时先不进行交换值的操作),如果第二层循环得到的最小的值的下标与最开始标记的下标不同则将这两个值进行交换

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

3.快速排序(在数据量不多时是最快的 冒泡排序的进阶)

n log n

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

5.插入排序(插入数据的时候进行排序)

6.归并排序(大数据排序的常用方法)

标签:arr,下标,log,数组,var,console
From: https://www.cnblogs.com/sdcffsdc233/p/16586451.html

相关文章

  • 数组应用!!!
    稀疏数组类似棋盘上的棋子:用二维数组保存:用稀疏数组来保存:publicclassXiShu{publicstaticvoidmain(String[]args){//创造二维数组i......
  • JDK数组阻塞队列源码深入剖析
    JDK数组阻塞队列源码深入剖析前言在前面一篇文章从零开始自己动手写阻塞队列当中我们仔细介绍了阻塞队列提供给我们的功能,以及他的实现原理,并且基于谈到的内容我们自己实......
  • 数组根据时间戳排序
    exportfunctioncompare(arr,key,type="asc"){returnarr.sort((value1,value2)=>{constval1=value1[key];constval2=value2[key];//re......
  • 3、数组、集合、Lambda、Stream与Optional类
    一、数组:数组保存在JVM堆内存中1、数组的创建:(1)、一维数组创建方式一://一维数组方式一Integer[]array01={1,2,3};System.out.println("一维数组创建方式一");Sys......
  • 数组下标越界错误以及解决方案
    数组下标越界错误以及解决方案有些时候我们在输出数组的时候会出现java.lang.ArrayIndexOutOfBoundsException这个错误,翻译过来就是数组的下标越界了,即超过了一开始声明......
  • [AcWing 4507] 子数组异或和
    异或的性质点击查看代码#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=1e6+10;intn;inta[N];voidsolve(){......
  • 4.寻找两个有序数组的中位数
    首先这个题目最容易想到的解决方法是把两个数组合并之后选出中位数,但是这样的时间复杂度为\(O(m+n)\)与题目的要求不符合,根据题目中的要求\(O(log(m+n))\)可以想到可能要采......
  • Java学习 (20) Java数组篇(04)Arrays类&冒泡排序&稀疏数组
    目录Arrays类语法实例冒泡排序语法实例具体讲解视频(狂神说Java)稀疏数组语法实例具体讲解视频(狂神说Java)Arrays类教组的工具类java.util.Arrays由于数组对象本身并没有......
  • 数组
    Arrays.sort(arr);publicstaticvoidsort(Object[]a)对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。......
  • Java数组
    Java数组数组的定义:数组是相同类型数据的有序集合。数组描述的是相同类型的若干数据,按照一定的先后次序排列组合而成。其中,每一个数据称为一个数组元素,每个数组元素......