JS快速排序_js数组排序的几种方法

(3) 2024-05-30 19:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说JS快速排序_js数组排序的几种方法,希望能够帮助你!!!。

//4.快速排序
//先排一趟
//先用parition函数排出比支点(指定最后一个为指点)小的放左边,比支点大的放在支点的右边
function partition(arr, l, r) { 
   
    let j = l;
    let key = arr[r]
    for (let i = l; i < r; i++) { 
   
        if (arr[i] < key) { 
   
            let tmp = arr[j];
            arr[j] = arr[i];
            arr[i] = tmp;
            j++;
        }

    }
    let temp = arr[j];
    arr[j] = arr[r];
    arr[r] = temp;
    console.log(j);
    return j;
}
//用fastSort函数调用上面的函数,得到支点此时的位置,再对支点左右两边分别递归
function fastSort(arr, low, high) { 
   
    if(high<2){ 
   
        return arr;
    }
    if (low < high) { 
   
        let m = partition(arr, low, high);
        fastSort(arr, low, m - 1);
        fastSort(arr, m, high);
    }
    return arr;
}
console.log(fastSort(arr, 0, arr.length - 1));

第二种

//快排第二种
function fastSort1(arr) { 
   
    if (arr.length < 2) { 
   
        return arr;
    }
    let left = [];
    let right = [];
    //支点
    let privot = Math.floor(arr.length / 2);
    // console.log(privot, 'ppp');
    let p = arr.splice(privot, 1)[0];
    // console.log(arr);
    // console.log(p, 'iii');
    for (let i = 0; i < arr.length; i++) { 
   
        if (arr[i] < p) { 
   
            left.push(arr[i]);
        } else { 
   
            right.push(arr[i]);
        }
    }
    return fastSort1(left).concat([p], fastSort1(right));
}
console.log(fastSort1(arr));

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复