javascript 快速排序 无缘错误,我哪里错了?

学习算法 javascript 实现,写一个简单的快速排序,在浏览器中一直报错。
代码:

    function quickSort(arr){
        var len;
        len=arr.length;
        if (len <= 1) {
            return arr; //如果数组只有一个数,就直接返回;
        }
        var midlen = Math.floor(len/2);
        var mid = arr[midlen];
        // console.log(mid);
        var left = [];
        var right = [];
        for (var i = 0; i < len; i++) {
            if (arr[i] < mid) {
                left.push(arr[i]);
            } else {
                right.push(arr[i]);
            }
        }
        // console.log(left.concat([mid],right));
         return quickSort(left).concat([mid], quickSort(right));
    }
    //test
    console.log(quickSort([9, 2, 8, 5, 1]));

图片描述

阅读 2.4k
2 个回答

死循环,堆栈溢出了。right数组有两项,9,8.递归执行的时候始终是9,8.
因为此时mid是8,ara[i]始终>=mid,right数组始终是9,8.就死循环了。
正确写法如下:


function quickSort(arr){
    var len;
    len=arr.length;
    if (len <= 1) {
        return arr; //如果数组只有一个数,就直接返回;
    }
    var midlen = Math.floor(len/2);
    // var mid = arr[midlen];
    var mid = arr.splice(midlen,1)[0];
    // console.log(mid);
    var left = [];
    var right = [];
    for (var i = 0,len=arr.length; i < len; i++) {
        if (arr[i] <= mid) {
            left.push(arr[i]);
        } else {
            right.push(arr[i]);
        }
    }
    // console.log(left.concat([mid],right));
    return quickSort(left).concat([mid], quickSort(right));
}
//test
console.log(quickSort([9, 2, 8, 5, 1]));
//输出:[ 1, 2, 5, 8, 9 ]
            if (arr[i] < mid) {
                left.push(arr[i]);
            } else if (arr[i] > mid) {
                right.push(arr[i]);
            }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题