数组排序的一些常用算法总结

冒泡排序

思想:使用for循环,每次循环把最小或最大的项放到数组最前面,例如:i = 0时,循环数组arr,如果arr[ j ]满足判断条件,就将arr[ i ]和arr[ j ]的值互换,也就是说每次 i 加1,i之前的值都是排完序的数组。最后返回排序数组。
时间复杂度:O(n²)

// 冒泡排序
// arr:需要排序的数组;isAsc:是升序还是降序,默认升序
 function bubbleSort(arr,isAsc=true){
     if(arr.length <= 1) {return arr};
     for(let i=0; i<arr.length - 1; i++){
         for(let j = i+1 ; j<arr.length ; j++){
             if(isAsc?arr[i]>arr[j]:arr[i]<arr[j]){
                 let str = arr[i];
                 arr[i] = arr[j];
                 arr[j] = str;
             }
         }
     }
     return arr;
 }
 // 注:第二个参数默认有值,除了不传和undefined时使用默认值,其他全部使用传入值
 arrSort = [1,2,3,5,2,1,4,6,2,7,2,3]
 console.log(bubbleSort(arrSort,false));

快速排序

思想:先找中间索引值(基准值),从数组中删除基准值,然后创建两个空数组,对数组中的每一项与基准值比较,比基准值小的放左边数组,比基准值大的放右边数组。之后分别迭代左右数组,最后返回左右数组合并的数组。
时间复杂度:O(nlog₂n)

// 快速排序
function quickSort(arr,isAsc=true){
    if(arr.length<=1){return arr};
    var pointIndex = Math.floor(arr.length/2);
    // 删除数组中间值,并取出中间值
    var pointValue = arr.splice(pointIndex,1)[0];
    var leftArr = [];
    var rightArr = [];
    for(let i = 0 ; i <arr.length ; i++){
        (isAsc?arr[i]<pointValue:arr[i]>pointValue)?leftArr.push(arr[i]):rightArr.push(arr[i]);
    }
    return quickSort(leftArr,isAsc).concat(pointValue,quickSort(rightArr,isAsc));
}

console.log(quickSort(arrSort,false));

单纯想要进行数组排序,可以使用数组对象原型链上自带的sort()函数。此函数改变的是原数组。

arrSort1.sort(function(a,b){
	// return a-b; // 升序
    return b-a; // 降序
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值