js实现排序

归并排序

function mergeSort(arr){

    return sort(arr, 0, arr.length - 1); // 注意右区间是arr.length - 1

    // sort方法,进行递归
    function sort(arr, left, right){
        
        // 当left !== right时,证明还没分拆到最小元素
        if(left < right){
            // 取中间值,分拆为两个小的数组
            const mid = Math.floor((left+right) / 2);
            const leftArr = sort(arr, left, mid);
            const rightArr = sort(arr, mid+1, right);
            // 递归合并
            return merge(leftArr, rightArr)
        }

        // left == right, 已经是最小元素,直接返回即可
        return left >= 0 ? [arr[left]] : [];
    }

    // 合并两个有序数组
    function merge(leftArr, rightArr){
        let left = 0;
        let right = 0;
        const tmp = [];

        // 使用双指针,对两个数组进行扫描
        while(left < leftArr.length && right < rightArr.length){
            if(leftArr[left] <= rightArr[right]){
                tmp.push(leftArr[left++]);
            }else{
                tmp.push(rightArr[right++]);
            }
        }

        // 合并剩下的内容
        if(left < leftArr.length){
            while(left < leftArr.length){
                tmp.push(leftArr[left++]);
            }
        }

        if(right < rightArr.length){
            while(right < rightArr.length){
                tmp.push(rightArr[right++]);
            }
        }

        return tmp;
    }

}

选择排序

function selectionSort(arr){
    const len = arr.length;

    for(let i = 0; i < len-1; i++){
        let minIndex = i;
        for(let j = i+1; j < len; j++){
            if(arr[j] < arr[minIndex]){
                minIndex = j; // 保存最小数的下标
            }
        }

        const tmp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = tmp;
    }

    return arr;
}

冒泡排序

var arr = [3, 4, 1, 2];
function bubbleSort (arr) {
  var max = arr.length - 1;
  for (var j = 0; j < max; j++) {
    // 声明一个变量,作为标志位
    var done = true;
    for (var i = 0; i < max - j; i++) {
      if (arr[i] > arr[i + 1]) {
        var temp = arr[i];
        arr[i] = arr[i + 1];
        arr[i + 1] = temp;
        done = false;
      }
    }
    if (done) {
      break;
    }
  }
  return arr;
}
bubbleSort(arr);
————————————————
版权声明:本文为CSDN博主「FEWY」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fe_dev/article/details/79600448

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值