为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

炎炎设计 2018-10-09 13:14:54
学习算法 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]));
查看完整描述

1 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

死循环,堆栈溢出了。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 ]


查看完整回答
反对 回复 2018-11-30
  • 1 回答
  • 0 关注
  • 486 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信