nodejs实现冒泡排序和快速排序

2020-07-28  本文已影响0人  笙箫竽笛

冒泡排序:双层循环,内部循环每次选出最大值或者最小值,放到头上或者放在尾部

function sort (arr, sorting = 1) {
     if (sorting < 0) { //逆序
        for (let i = 0; i < arr.length; i++) {
            for (let j = i + 1; j < arr.length; j++) {
                if (arr[i] < arr[j]) {
                    let a = arr[i];
                    arr[i] = arr[j];
                    arr[j] = a;
                }
            }
        }
     } else { //正序
        for (let i = 0; i < arr.length; i++) {
            for (let j = i + 1; j < arr.length; j++) {
                if (arr[i] > arr[j]) {
                    let a = arr[i];
                    arr[i] = arr[j];
                    arr[j] = a;
                }
            }
        }
     }
 }

快速排序:递归调用,每次递归选出一个“中值”,头部和尾部分别跟“中值”比较,找出可交换值后交换位置。每次交换后,数组的逆序减少比其他排序算法要多,所以相对比较快

function quickSort(arr, start, end, sorting = 1) {

    if(start > end){
        return;
    }
    let i = start;
    let j = end;
    let m = arr[start];
    if (sorting < 0) { //逆序
        while (i < j) {
            //先看右边,依次往左递减
            while (m <= arr[j] && i < j) {  //6<5  9
                j--;
            }
            //再看左边,依次往右递增
            while (m >= arr[i] && i < j) {  //6>=7
                i++;
            }
            //如果满足条件则交换
            if (i < j) {
                let t = arr[j];
                arr[j] = arr[i];
                arr[i] = t;
            }
        }
    } else { // 正序
        while (i < j) {
            //先看右边,依次往左递减
            while (m >= arr[j] && i < j) {  //6<5  9
                j--;
            }
            //再看左边,依次往右递增
            while (m <= arr[i] && i < j) {  //6>=7
                i++;
            }
            //如果满足条件则交换
            if (i < j) {
                let t = arr[j];
                arr[j] = arr[i];
                arr[i] = t;
            }
        }
    }
    //最后将基准为与i和j相等位置的数字交换
    arr[start] = arr[i];
    arr[i] = m;
    //递归调用左半数组
    quickSort(arr, start, j - 1, sorting);
    //递归调用右半数组
   quickSort(arr, j + 1, end, sorting);
}
上一篇下一篇

猜你喜欢

热点阅读