前端学习笔记(17)之QuickSort、InsertionSort 及JS的24个数组方法合集

快速排序、插入排序、数组方法

QuickSort

递归二分排序(快速排序)
原理:
重复的操作就是:不断的取中间元素,然后遍历数组,小于中间元素的放左边,大于中间元素的放右边。
通过这个操作分出了两个数组,再对这两个数组进行之前的操作,不断分出来数组,对每个数组都执行之前的操作来分解,直到分无可分,数组就排好序了。

var arr = [81, 14, 32, 22, 16, 7, 1, 5, 9]
        function quickSort(arr){
            if(arr.length<1){
                return arr
            }
            var centerIndex = parseInt(arr.length/2)
            var center = arr.splice(centerIndex,1)[0]
            var left = []
            var right = []
            for(var i = 0 ; i < arr.length ; i++){
                if(arr[i] < center){
                    left.push(arr[i])
                }else{
                    right.push(arr[i])
                }
            }
            return quickSort(left).concat(center,quickSort(right))
        }
        var res = quickSort(arr)
        console.log(res)

InsertionSort

插入排序原理:
先用变量temp存一下每次用来插入的元素arr[i]的值,然后设置j=i-1,j总是表示用来插入的元素的前一个元素的下标,接下来就是关键while循环了,也是插入排序的核心思想:只要前边的比我大,我就往前排一位,直到没有比我大的,我停止比较。
因为j总是前一位的下标,所以当你想要停下来,就把值赋给arr[j+1],就可以停下来。

var arr = [12,3,45,12,6]        
for(var i = 1 ; i < arr.length ; i++){
            var temp = arr[i]
            var j = i-1  //j表示用来插入的元素的前一位
            while(arr[j]>temp){
                arr[j+1] = arr[j]
                j--
            }
            arr[j+1]=temp
        }
        console.log(arr)

详细注释版:
在这里插入图片描述

Array Methods

基础方法:
push()把所有参数按顺序添加到数组末尾
pop() 删除数组的最后一个元素
shift()删除数组的最前面一个元素
unshift()在数组的最前面插入一些数据

ES3.0提供的方法:
reverse()反转数组
sort() 数组排序
splice() 1.截取数组2.替换新内容

上面七个都直接操作原数组,后面的方法不改变原始数组。

concat() 拼接数组
slice() 获取数组里面的一些数据
join() 用连接符号连接数组里每个元素

ES5.0提供的方法:
indexOf()查看数组里面指定数据的索引
lastIndexOf()反向查看数组里面指定数据的索引
forEach() 遍历数组
map() 映射数组
filter()过滤原始数组,把符合条件的放在新数组
every()判断原数组是不是每一个都符合条件
some()判断原数组里有没有符合的

ES6以后:
find()根据条件找到数组里满足条件的数据
findIndex()根据条件找到数组里满足条件的数据的下标
flat()拍平数组
flatMap()拍平数组,但是只能拍一层
fill()使用指定数据填充数组
includes()查看数组中是不是有某一个数据
copyWithin()使用数组里面的内容替换数组里的内容

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值