首页新闻找找看学习计划

请大神看下我这段js到底哪里出了问题,提示堆栈溢出。

0
[待解决问题]
<div id="sortNum">...</div>
 <script type="text/javascript">
  var arr = [10,20,30,5,6,42,9];
  /*var arr2 = [100,200,300,50,60,420,90];
  var arr3 = new Array();
  arr3 = arr3.concat(arr, arr2);*/
  
  //冒泡排序
  /*var temp = '';
  for (var i = 0; i < arr.length; i++) {
   for (var j = arr.length-1; j > i; j--) {
    if (arr[j] < arr[j-1]) {
     temp = arr[j-1];
     arr[j-1] = arr[j];
     arr[j] = temp;
    }
   }
  }*/
  
  //快速排序
  var arr3 = fastSort(arr);
  function fastSort(arr) {
   if(arr.length <=1) {
    return arr;
   } else {
    var key = arr[0];
    var arrLeft = [];
    var arrRight = [];
    var arrConcat = [];
    for(var i = 0; i < arr.length; i++) {
     if (key >= arr[i]) {
      arrLeft.push(arr[i]);
     } else {
      arrRight.push(arr[i]);
     }
    }
    arrLeft = fastSort(arrLeft);
    arrRight = fastSort(arrRight);
    return arrConcat.concat(arrLeft, arrRight);
   }
  }
  
  document.getElementById('sortNum').innerHTML = arr3.join();
 </script>
 
数组快速排序的操作,这段js好像死循环了,why?
风之约的主页 风之约 | 菜鸟二级 | 园豆:202
提问于:2012-12-10 14:59
< >
分享
所有回答(2)
0

首先,冒泡排序里面的j要改成i;j=j = arr.length

积累轩 | 园豆:216 (菜鸟二级) | 2012-12-10 15:13

在function fastsort方法中,alert(arr.length)这是个死循环,永远都不会进入arr.length<=1的时候;你没有把arr里面的值移除    if (key >= arr[i]) {
                        arrLeft.push(arr[i]);

arr.substring(移除当前值)
                    } else {
                        arrRight.push(arr[i]);

同理
                    }

支持(0) 反对(0) 积累轩 | 园豆:216 (菜鸟二级) | 2012-12-10 15:24

@积累轩: if (key >= arr[i]) {
      arrLeft.push(arr[i]);
     } else {
      arrRight.push(arr[i]);
     }
     arr.splice(i, 1);

改成这样后就只剩下两个值了,也不对呀。

支持(0) 反对(0) 风之约 | 园豆:202 (菜鸟二级) | 2012-12-10 16:15

@积累轩: 其实你说的也不全对,我改了下,ok了。

function fastSort() {
            var a = arguments[0];
            if(a.length <=1) {
                return a;
            } else {
                var key = a[0];
                var arrLeft = [];
                var arrRight = [];
                var arrConcat = [];
                for(var i = 1; i < a.length; i++) {
                    if (key > a[i]) {
                        arrLeft.push(a[i]);
                    } else {
                        arrRight.push(a[i]);
                    }
                }
                arrLeft = fastSort(arrLeft);
                arrRight = fastSort(arrRight);
                return arrConcat.concat(arrLeft, key, arrRight);
            }
        }

支持(0) 反对(0) 风之约 | 园豆:202 (菜鸟二级) | 2012-12-11 18:43

@风之约: 那恭喜了

支持(0) 反对(0) 积累轩 | 园豆:216 (菜鸟二级) | 2012-12-12 08:56
0

你这个逻辑完全错误!

Vincent.Pei | 园豆:156 (初学一级) | 2012-12-10 18:24

请问哪里错了?

支持(0) 反对(0) 风之约 | 园豆:202 (菜鸟二级) | 2012-12-11 18:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册