JavaScript数组排序笔记

简介:

工作中经常用到的几种排序方式,整理出来分享给大家以备不时之需。

1、array排序函数sort

使用Array的sort方法。

var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2]
arr.sort((a,b) => {
    return a - b
})
console.log(arr) // 结果:[0, 2, 2, 2, 5, 5, 6, 7, 8]

2、冒泡排序

将数组中的相邻两个元素进行比较,将比较大(较小)的数通过两两比较移动到数组末尾(开始),执行一遍内层循环,确定一个最大(最小)的数,外层循环从数组末尾(开始)遍历到开始(末尾)。

var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2]
for(var i=0;i<arr.length;i++) {
    for(var j=0;j<arr.length-1;j++) {
        if (arr[j]>arr[j+1]) {
            let news = arr[j]
            arr[j] = arr[j+1]
            arr[j+1] = news
        }
    }
}
console.log(arr) 
// 结果:[0, 2, 2, 2, 5, 5, 6, 7, 8]

3、选择排序

首先从原始数组中找到最小的元素,并把该元素放在数组的最前面,然后再从剩下的元素中寻找最小的元素,放在之前最小元素的后面,minIndex始终保存着最小值的位置的索引,随着i的自增,遍历的数组长度越来越短,直到完成排序。

var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2]
for(var i=0;i<arr.length;i++) {
    var minIndex=i;
    for(var j=i+1;j<arr.length;j++) {
        if(arr[j]<arr[minIndex]){
            minIndex=j
        }
    }
    if(minIndex!=i){
        var news = arr[i];
        arr[i]=arr[minIndex]
        arr[minIndex]=news
    }
}
console.log(arr) // 结果:[0, 2, 2, 2, 5, 5, 6, 7, 8]

4、插入排序

var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2]

//假设第0个元素是一个有序的数列,第1个以后的是无序的序列,
//所以从第1个元素开始将无序数列的元素插入到有序数列中
for(var i = 1; i < arr.length; i++){
    //升序
    if(arr[i] < arr[i-1]){
        //取出无序数列中的第i个作为被插入元素
        var guard = arr[i];
        //记住有序数列的最后一个位置,并且将有序数列位置扩大一个
        var j = i - 1;
        arr[i] = arr[j];

        //比大小,找到被插入元素所在的位置
        while(j >= 0 && guard < arr[j]){
            arr[j+1] = arr[j];
            j--;
        }

        //插入
        arr[j+1] = guard;
    }
}

console.log(arr) // 结果:[0, 2, 2, 2, 5, 5, 6, 7, 8]

5、快速排序

快速排序涉及到了递归,将一个数组的排序问题看成是两个小数组的排序问题,而每个小的数组又可以继续看成更小的两个数组,一直递归下去,直到数组长度大小最大为2。

var arr = [2, 8, 5, 0, 5, 2, 6, 7, 2]

function quickSort(arr){  
    if(arr.length<=1){//如果数组只有一个数,就直接返回;  
        return arr;  
    }  
    var num=Math.floor(arr.length/2);//找到中间数的索引值,如果是浮点数,则向下取整  
    var newValue=arr.splice(num,1);//找到中间数的值  
    var left=[],right=[];  
    for(var i=0;i<arr.length;i++){  
        if(arr[i]<newValue){  
            left.push(arr[i]);//基准点的左边的数传到左边数组  
        }else{  
            right.push(arr[i]);//基准点的右边的数传到右边数组  
        }  
    }  
    return quickSort(left).concat(newValue,quickSort(right));//递归不断重复比较  
}  
    
console.log(quickSort(arr)) 
// 结果:[0, 2, 2, 2, 5, 5, 6, 7, 8]
相关文章
|
1月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
43 0
|
17天前
|
自然语言处理 JavaScript 前端开发
[JS]同事看了我做的this笔记,直摇头,坦言:我还是参考启发博文吧
本文介绍了JavaScript中`this`关键字的重要性和使用规则。作者回顾了早期笔记,总结了`this`指向的各种情况,并分享了最新的理解。文章强调了`this`在不同上下文中的指向,包括对象方法、全局函数、箭头函数等,并提供了改变`this`指向的方法。适合JavaScript开发者参考。
35 2
|
1月前
|
自然语言处理 前端开发 JavaScript
🛠️ JavaScript数组操作指南:20个精通必备技巧🚀
本文详细介绍了 JavaScript 中的 20 个高效数组操作技巧,涵盖了从基本的添加、移除元素,到数组转换和去重等高级操作。强调了不可变性的重要性,提供了清晰的代码示例,帮助开发者编写更整洁和高效的代码。无论是新手还是经验丰富的开发者,这些技巧都将显著提升您的编码能力,使您在项目中更具竞争力。
26 2
|
1月前
|
JavaScript 前端开发 测试技术
JS都有哪些操作数组的方法
JS都有哪些操作数组的方法
24 3
|
2月前
|
JavaScript 前端开发 Java
JavaScript笔记(回顾一,基础知识篇)
JavaScript基础知识点回顾,包括语言定义、ECMAScript规范、字面量、变量声明、操作符、关键字、注释、流程控制语句、数据类型、类型转换和引用数据类型等。
JavaScript笔记(回顾一,基础知识篇)
|
1月前
|
JavaScript
js删除数组中已知下标的元素
js删除数组中已知下标的元素
36 4
|
1月前
|
缓存 JavaScript 前端开发
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
33 1
|
1月前
|
JavaScript 前端开发 Java
【javaScript数组,函数】的基础知识点
【javaScript数组,函数】的基础知识点
24 5
|
1月前
|
JavaScript 前端开发 索引
探索JavaScript数组:基础
探索JavaScript数组:基础
18 3
|
1月前
|
JavaScript 前端开发 索引
JS 删除数组元素( 5种方法 )
JS 删除数组元素( 5种方法 )
42 1