js的冒泡排序和sort方法

本文介绍了JavaScript中对数组进行排序的两种方法:冒泡排序及其原理,以及Array.sort()方法的工作机制。通过实例展示了sort()方法默认按字母编码排序的特点,并提出可以通过自定义比较函数实现升序或降序排列。需要注意的是,sort()方法会直接修改原数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想要对一堆乱序的数组进行排序,我们可以采用冒泡排序和sort方法。冒泡排序是最基础的算法。
##冒泡排序
冒泡排序的原理:
1、比较相邻两元素,如果前一个比后一个大,则交换位置。
2、比较的第一轮,最大的元素排在了最后。
3、因为最大的元素在最后,所以最大的元素不参与下一轮的排序。
微信图片_20200715170457.jpg

var arr = [2,3,1,0,4]
function Bubble_Sort(arr){
        for(var i = 0, var len1 = arr.length; i < len1; i++){
            for(var j = 0, len2 = arr.length - 1 - i; j < len2; j++){
                if(arr[j] > arr[j+1]){
                    var temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        return arr
    }
    
console.log(Bubble_Sort(arr));    //返回 [0,1,2,3,4]

冒泡排序总共比较n-1次

##sort()方法排序
sort() 方法用于对数组的元素进行排序。
w3c上的解释是:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。
不太懂,我们来试试

var arr1 = ['c', 'a', 't', 's', 'g'];
var arr2 = [2, 4, 1, 3,21,20];
var arr3 = ['2', '4', '1', '3', '21', '20'];

console.log(arr1.sort());  // ["a", "c", "g", "s", "t"] 顺序正确
console.log(arr2.sort());  // [1, 2, 20, 21, 3, 4] 顺序错了
console.log(arr3.sort());  //["1", "2", "20", "21", "3", "4"] 顺序错了

这下懂了吧,sort没参数时时按字符编码进行排序的。

为了解决这个问题,我们自己封装一个顺序函数就好了,可以封装为升序排列和降序排列。

//升序排列,传入的value是用于比较的属性
 function A_order (value){
    return function(a,b){
         var a = a[value]
         var b = b[value]
         return a - b
    }
}
//升序排列,传入的value是用于比较的属性
 function D_order (value){
    return function(a,b){
         var a = a[value]
         var b = b[value]
         return b - a
    }
}

var arr3 = [
    {name:'小明', age:18},
    {name:'小红', age:15},
    {name:'小白', age:10},
    {name:'小蓝', age:20}
 ]
var arr4 = [
    {name:'小明', age:18},
    {name:'小红', age:15},
    {name:'小白', age:10},
    {name:'小蓝', age:20}
]
console.log(arr3.sort(A_order('age')))  //升序
console.log(arr4.sort(D_order('age')))  //降序

image.png

这里要注意,会直接改变数组原有的值,即在原数组上进行操作,改变原数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值