我用1,000,000个数字测试它,它只是一种悬挂。我认为它可以很容易地轻松通过1,000,000。它是我的实现吗?我有一种感觉,因为slice()
,任何人都有想法?为什么这种1,000,000合并类型的实现需要这么长时间?
编辑: 刚刚得到这个消息: FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory
TopDownSplitMerge(numbersArray);
function TopDownSplitMerge(arrayOfNumbers) {
var length = arrayOfNumbers.length
var middleIndex = parseInt(length/2);
if(length <= 1) {
return arrayOfNumbers;
}
// Split left side
var left = TopDownSplitMerge(arrayOfNumbers.slice(0, middleIndex));
// Split right side
var right = TopDownSplitMerge(arrayOfNumbers.slice(middleIndex, length));
// Merge every back together
return TopDownMerge(left, right);
}
function TopDownMerge(left, right) {
var results = []
while(left.length || right.length) {
console.log("looping...");
// Check if both sides are NOT empty, if so, then just finish shifting the non-empty side
if(left.length && right.length) {
if(left[0] <= right[0]) {
results.push(left.shift())
} else {
results.push(right.shift())
}
} else if(left.length) {
results.push(left.shift())
} else {
results.push(right.shift())
}
}
console.log("Merging....", results.length);
return results;
}
这个问题似乎是题外话,因为它属于上[codereview.se。 –
你有没有试过你的代码只有几个数字,看看它是否工作正常? –
它无法对'[1,2,3,4]'进行排序。 – thefourtheye