快速排序

611 阅读1分钟

快速排序就是从中间取一个数然后声明两个空数组, 小于这个数的放在左边大于这个数的放在右边

最后通过递归调用实现的一种排序方法比冒泡排序用时更多

        
function quickSort(arr) {
    console.time("快速排序耗时")
    //递归出口
    if (arr.length <= 1) {
        return arr;
    }
    let middleIndex = Math.floor(arr.length / 2);//中间数的下标 分奇偶
    let middle = arr[middleIndex]; //或者 let middle = arr.splice(middleIndex, 1)
    let left=[];
    let right=[];
    for(let i=0;i<arr.length;i++){
       if(arr[i]<middle){
           left.push(arr[i])
       }else if(arr[i]>middle){
           //注意这里不要直接写else 要排除相等的时候 否则会造成死循坏
           right.push(arr[i])
       }
    }
   console.timeEnd("快速排序耗时")
   return sort(left).concat([middle],sort(right))
}
console.log(sort(arr))

上面这种方法,会去重,[2, 3, 1, 1, 4, 1, 0]进行排序, 代码实际输出:0,1,2,3,4

不去重的写法:代码实际输出:0,1,1,1,2,3,4

function quickSort(arr) {
    console.time("快速排序耗时")
    //递归出口
    if (arr.length <= 1) {
        return arr;
    }
    let middleIndex = Math.floor(arr.length / 2);//中间数的下标 分奇偶
    let middle = arr[middleIndex];
    let left=[];
    let right=[];
    let temp = [middle];
    for(let i=0;i<arr.length;i++){
       if(arr[i]<middle){
           left.push(arr[i])
       }else if(arr[i]>middle){
           //注意这里不要直接写else 要排除相等的时候 否则会造成死循坏
           right.push(arr[i])
       }else {
           temp.push(middle)
       }
    }
    console.timeEnd("快速排序耗时")
    return sort(left).concat(temp,sort(right))
}
console.log(sort(arr))

借鉴: www.cnblogs.com/cq171558443…