美文网首页
nodejs实现冒泡排序和快速排序

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

作者: 笙箫竽笛 | 来源:发表于2020-07-28 09:27 被阅读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);
    }
    

    相关文章

      网友评论

          本文标题:nodejs实现冒泡排序和快速排序

          本文链接:https://www.haomeiwen.com/subject/npixrktx.html