javascript中合并排序的简单实现
下面的合并排序算法实现有什么问题。它只返回未定义的 我怀疑错误在合并函数中的某个地方 有人能帮我指出错误吗javascript中合并排序的简单实现,javascript,mergesort,Javascript,Mergesort,下面的合并排序算法实现有什么问题。它只返回未定义的 我怀疑错误在合并函数中的某个地方 有人能帮我指出错误吗 function mergeSort(arr1, lower, higher) { if (lower < higher) { var mid = Math.floor((lower + higher) / 2); mergeSort(arr1, lower, mid); mergeSort(arr1, mid + 1
function mergeSort(arr1, lower, higher) {
if (lower < higher) {
var mid = Math.floor((lower + higher) / 2);
mergeSort(arr1, lower, mid);
mergeSort(arr1, mid + 1, higher);
merge(arr1, lower, mid, higher);
}
}
撇开排序中可能出现的“off-by-1”错误不谈,merge()
函数在将合并列表复制回源数组的方式上存在问题。函数被告知从较低的
合并到较高的
,它会这样做。但是,合并后的数组将从索引0开始复制回原始数组。相反,您需要确保原始数组仅在较低
和较高
之间修改:
for (var a = 0; a <= k; a++) {
console.log(a);
arr1[a + lower] = mergearr[a]; // <--- here
console.log(arr1[a + lower]);
}
for(var a=0;a将排序中可能出现的“off-by-1”错误放在一边,merge()
函数在将合并列表复制回源数组的方式上存在问题。该函数被告知从较低的合并到较高的,确实如此。但是,合并后的数组将从索引0开始复制回原始数组。相反,您需要确保原始数组仅在较低
和较高
之间修改:
for (var a = 0; a <= k; a++) {
console.log(a);
arr1[a + lower] = mergearr[a]; // <--- here
console.log(arr1[a + lower]);
}
for(var a=0;a我可以调整您的代码。是的,问题在于您的merge()
函数。请看:
- 您不需要从
merge()
返回任何内容,因为此值
没有在任何地方使用
a
应从lower
开始,该值在中每次递增
以避免重写数组中已排序的部分
- 你用来获取奇数索引值的构造很奇怪,而且
肿胀
- 此外,在函数的开头,您还弄乱了索引
var-arr=[5,3,7,8,1,2,6,3,2];
合并排序(arr,0,arr.length-1);
控制台日志(arr);
功能合并排序(arr、较低、较高){
如果(较低<较高){
var mid=数学楼层((较低+较高)/2);
合并排序(arr、下、中);
合并排序(arr、mid+1、更高);
合并(arr、低、中、高);
}
}
功能合并(arr、低、中、高){
var l=中下部+1,r=中上部,k=中下部,mergearr=[],i=0,j=0;
而(i 如果(arr[lower+i]我可以调整您的代码。是的,问题在于您的merge()
函数。请看:
- 您不需要从
merge()
返回任何内容,因为此值
没有在任何地方使用
a
应从lower
开始,该值在中每次递增
以避免重写数组中已排序的部分
- 你用来获取奇数索引值的构造很奇怪,而且
肿胀
- 此外,在函数的开头,您还弄乱了索引
var-arr=[5,3,7,8,1,2,6,3,2];
合并排序(arr,0,arr.length-1);
控制台日志(arr);
功能合并排序(arr、较低、较高){
如果(较低<较高){
var mid=数学楼层((较低+较高)/2);
合并排序(arr、下、中);
合并排序(arr、mid+1、更高);
合并(arr、低、中、高);
}
}
功能合并(arr、低、中、高){
var l=中下部+1,r=中上部,k=中下部,mergearr=[],i=0,j=0;
而(i 如果(arr[lower+i]在合并排序
函数中没有返回任何内容。在合并排序
函数中没有返回任何内容。
for (var a = 0; a <= k; a++) {
console.log(a);
arr1[a + lower] = mergearr[a]; // <--- here
console.log(arr1[a + lower]);
}