【发布时间】:2015-08-16 23:55:12
【问题描述】:
我正在尝试实现归并排序,以便更好地了解它的工作原理。在下面的代码中,我试图对一个数字数组进行排序。我目前拥有的代码有问题并且在无限循环中运行。我现在正在尝试以非递归方式解决这个问题:
function mergeSort(arr) {
var mid = Math.floor(arr.length/2);
var left = arr.slice(0, mid);
var right = arr.slice(mid, arr.length);
if (arr.length === 1) {return arr};
var sorted = [];
var i = 0;
while (left.length || right.length) {
if (left.length && right.length) {
if (left[0] < right[0]) {
sorted.push(left.shift())
} else {
sorted.push(right.shift())
}
} else if (left) {
sorted.push(left.shift())
} else {
sorted.push(right.shift())
}
i++;
}
return sorted;
}
所以如果我有一个数组 var nums = [1, 4, 10, 2, 9, 3]; 调用 mergeSort(nums) 应该返回 [1, 2, 3, 4, 9, 10]。
【问题讨论】:
-
你在哪里定义
merge? -
你的问题到底是什么?
-
如果您没有提供任何意见或预期结果,我们应该如何提供帮助?
-
抱歉。我现在提供了输入和预期结果。此外,我希望此函数仅适用于数字数组。
标签: javascript algorithm sorting