javascript 快速排序 无缘错误,我哪里错了?
phpcn_u233
phpcn_u233 2017-03-25 13:12:02
0
2
1401

学习算法 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]));

bVLcA3.png

phpcn_u233
phpcn_u233

全員に返信(2)
数据分析师

JavaScript クイック ソート エラー、どこで間違ったのでしょうか? -PHP中国語WebサイトQ&A-JavaScriptクイックソート エラーは出ませんでしたが、どこで間違えたのでしょうか? -PHP中国語サイトQ&A

ぜひ見て学んでください。

いいねを押す +0
阿神

死循环,堆栈溢出了。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));
}//testconsole.log(quickSort([9, 2, 8, 5, 1]));//输出:[ 1, 2, 5, 8, 9 ]


いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート