在 JavaScript 中实现归并排序算法
Implementing merge sort algorithm in JavaScript
我正在尝试在 JavaScript 中实现合并排序算法。但是在合并两个排序数组时我遇到了一个奇怪的行为。
当我将这两个数组:[1,4, 5]
和 [3, 6, 7, 10]
传递给合并函数时,我总是得到这样的结果:[ 1, 3, 4, 6, 7 ]
。奇怪的是没有元素 5
和 10
!
这是我的函数:
function merge(a, b)
{
var result = [],
k = 0,
i = 0,
j = 0;
while(a.length > i+1 && b.length > j+1){
if(a[i] <= b[j]){
result[k++] = a[i++];
} else {
result[k++] = b[j++];
}
}
while(a.length > i+1) {
result[k++] = a[i++];
}
while(b.length > j+1) {
result[k++] = b[j++];
}
return result;
}
如有任何帮助,我们将不胜感激。
谢谢。
只需将 i + 1
替换为 i
并将 j + 1
替换为 j
在所有 while 循环的条件下,它将正常工作。目前 a
和 b
的最后一个元素被忽略,因为它们的索引分别是 a.length - 1
和 b.length - 1
。
我正在尝试在 JavaScript 中实现合并排序算法。但是在合并两个排序数组时我遇到了一个奇怪的行为。
当我将这两个数组:[1,4, 5]
和 [3, 6, 7, 10]
传递给合并函数时,我总是得到这样的结果:[ 1, 3, 4, 6, 7 ]
。奇怪的是没有元素 5
和 10
!
这是我的函数:
function merge(a, b)
{
var result = [],
k = 0,
i = 0,
j = 0;
while(a.length > i+1 && b.length > j+1){
if(a[i] <= b[j]){
result[k++] = a[i++];
} else {
result[k++] = b[j++];
}
}
while(a.length > i+1) {
result[k++] = a[i++];
}
while(b.length > j+1) {
result[k++] = b[j++];
}
return result;
}
如有任何帮助,我们将不胜感激。
谢谢。
只需将 i + 1
替换为 i
并将 j + 1
替换为 j
在所有 while 循环的条件下,它将正常工作。目前 a
和 b
的最后一个元素被忽略,因为它们的索引分别是 a.length - 1
和 b.length - 1
。