gpt4 book ai didi

javascript - 递归函数的奇怪 jsPerf 行为

转载 作者:行者123 更新时间:2023-11-30 18:33:07 25 4
gpt4 key购买 nike

我在 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 ) );
};

如果您将其复制到您的控制台并运行 quicksort( arr ),您将看到它正确地返回了一个排序数组。

但出于某种原因,在 this test case在 jsPerf 上,我的快速排序函数似乎只返回一个数字(如“Perparation 代码输出”中所示)。它的运行速度似乎也比预期的要快。

任何对正在发生的事情有想法的人都将不胜感激。

最佳答案

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

When I make it create a copy of the array first , 然后它似乎工作。

关于javascript - 递归函数的奇怪 jsPerf 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9054813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com