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]
相关文章
|
30天前
|
存储 缓存 自然语言处理
深入理解JS | 青训营笔记
深入理解JS | 青训营笔记
26 0
|
24天前
|
JavaScript 前端开发 索引
JS遍历数组里数组下的对象,根据数组中对象的某些值,组合成新的数组对象
这篇文章介绍了如何在JavaScript中遍历数组里数组下的对象,并根据对象的某些属性值组合成一个新的数组对象。主要内容包括使用ES6的`for...of`循环来遍历数组对象,然后根据需要提取对象中的属性值,并将它们放入新的对象中,最终形成一个新的对象数组以供使用。
|
20天前
|
前端开发 JavaScript 开发者
【前端开发者的福音】彻底改变你编码习惯的神奇数组迭代技巧——从基础到进阶,解锁 JavaScript 数组迭代的N种姿势!
【8月更文挑战第23天】在Web前端开发中,数组是JavaScript中最常用的数据结构之一,掌握高效的数组迭代方法至关重要。本文详细介绍了多种数组迭代技巧:从基础的`for`循环到ES6的`for...of`循环,再到高阶方法如`forEach`、`map`、`filter`、`reduce`及`some`/`every`等。这些方法不仅能提高代码的可读性和维护性,还能有效优化程序性能。通过具体的示例代码,帮助开发者更好地理解和运用这些迭代技术。
24 0
|
9天前
|
JavaScript 前端开发
JavaScript基础知识-数组的遍历
关于JavaScript数组遍历基础知识的文章。
19 2
JavaScript基础知识-数组的遍历
|
9天前
|
JavaScript 前端开发
JavaScript基础知识-数组的练习
关于JavaScript基础知识中数组操作的练习,主要介绍了如何从一个包含Person对象的数组中过滤出成年人(年龄达到18岁及以上)并将他们放入一个新的数组中。
18 1
JavaScript基础知识-数组的练习
|
9天前
|
JavaScript 前端开发
JavaScript基础知识-数组的常用方法
关于JavaScript基础知识-数组的常用方法。
9 1
JavaScript基础知识-数组的常用方法
|
9天前
|
JavaScript 前端开发 索引
JavaScript基础知识-数组基于索引访问
关于JavaScript数组基于索引访问的基础知识介绍。
10 1
JavaScript基础知识-数组基于索引访问
|
9天前
|
JavaScript 前端开发
JavaScript基础知识-数组的定义方式
本文介绍了JavaScript中数组的多种定义方式。
9 1
JavaScript基础知识-数组的定义方式
|
4天前
|
存储 JavaScript 前端开发
JS中的数组有哪些常用操作函数和属性
【9月更文挑战第7天】JS中的数组有哪些常用操作函数和属性
8 1
|
13天前
|
JavaScript 前端开发 UED
JavaScript代码技巧大分享,在数组中去重元素
本文介绍了一系列实用的JavaScript函数,包括将内容复制到剪贴板、获取鼠标选中内容、打乱数组顺序、颜色值转换(RGBA与十六进制)、计算平均值、判断奇偶数、数组去重、检查空对象、反转字符串、计算日期间隔、首字母大写、生成随机字符串和随机数等,帮助提升网站的用户体验和功能丰富性。
19 4