Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 递归函数的奇怪jsPerf行为_Javascript_Jsperf - Fatal编程技术网

Javascript 递归函数的奇怪jsPerf行为

Javascript 递归函数的奇怪jsPerf行为,javascript,jsperf,Javascript,Jsperf,我在jsPerf上的测试用例中有以下代码: var arr = [0, 45, 96, 8, 69, 62, 80, 91, 89, 24, 6, 23, 49, 88, 26, 40, 87, 61, 83, 2, 60, 53, 43, 82, 67, 3, 65, 37, 42, 77, 73, 38, 9, 46, 75, 10, 63, 15, 47, 28, 79, 55, 59, 95, 11, 93, 70, 98, 25, 48, 30, 5, 72, 12, 84, 1, 2

我在jsPerf上的测试用例中有以下代码:

var arr = [0, 45, 96, 8, 69, 62, 80, 91, 89, 24, 6, 23, 49, 88, 26, 40, 87, 61, 83, 2, 60, 53, 43, 82, 67, 3, 65, 37, 42, 77, 73, 38, 9, 46, 75, 10, 63, 15, 47, 28, 79, 55, 59, 95, 11, 93, 70, 98, 25, 48, 30, 5, 72, 12, 84, 1, 29, 13, 50, 33, 19, 7, 31, 57, 32, 44, 74, 51, 35, 90, 86, 54, 4, 64, 92, 71, 22, 41, 16, 17, 27, 76, 39, 18, 99, 94, 36, 66, 85, 20, 21, 56, 34, 81, 14, 78, 68, 58, 97, 52];

Array.prototype.remove = function(from, to) {
  var rest = this.slice((to || from) + 1 || this.length);
  this.length = from < 0 ? this.length + from : from;
  return this.push.apply(this, rest);
};

function quicksort( arr ) {
  if ( arr.length <= 1 ) 
    return arr;
  var i = 0, 
      len = arr.length, 
      less = [], 
      greater = [], 
      random = Math.floor( Math.random() * len ), 
      pivot = arr[ random ];
  arr.remove( random );
  for ( ; i < len - 1; i++ ){
    if ( arr[ i ] <= pivot )
      less.push( arr[ i ] );
    else 
      greater.push( arr[ i ] );
  }
  return quicksort( less ).concat( pivot, quicksort( greater ) );
};
var-arr=[0, 45, 96, 8, 69, 62, 80, 91, 89, 24, 6, 23, 49, 88, 26, 40, 87, 61, 83, 2, 60, 53, 43, 82, 67, 3, 65, 37, 42, 77, 73, 38, 9, 46, 75, 10, 63, 15, 47, 28, 79, 55, 59, 95, 11, 93, 70, 98, 25, 48, 30, 5, 72, 12, 84, 1, 29, 13, 50, 33, 19, 7, 31, 57, 32, 44, 74, 51, 35, 90, 86, 54, 4, 64, 92, 71, 22, 41, 16, 17, 27, 76, 39, 18, 99, 94, 36, 66, 85, 20, 21, 56, 34, 81, 14, 78, 68, 58, 97, 52];
Array.prototype.remove=函数(从,到){
var rest=this.slice((to | | from)+1 | | this.length);
this.length=from<0?this.length+from:from;
返回此。推。应用(此,其余);
};
函数快速排序(arr){

如果(arr.length我认为问题在于您在原始数组上调用了
.remove()
函数,因此它会很快将其剥离为零。换句话说,对quicksort函数的每次初始调用都会删除一个元素


在Firefox中,我在“准备代码输出”中没有看到任何内容…另外,如果你真的想尝试更快的排序,你应该就地进行快速排序。创建新的子数组肯定会降低性能。你这样做的方法是将from/to索引传递到数组中,直到递归级别。嗯,我在Firefox中也看到了无输出的情况。这很奇怪。还有:就地quicksort将是我在这一胡说八道发生之前的下一个测试用例。Firefox中没有输出的原因是它在HTML节点上没有innerText属性,所以你只是在该节点上设置了一个随机属性。孩子们,你有了它:不要让自己依赖DOM库。感谢大家的提醒,@TheKaneda。我已经编辑了测试,改为使用innerHTML。谢谢,pointy。刚刚实现了同样的事情。我调用了
快速排序(arr.slice(0))
,现在一切都正常了。