Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中合并排序的简单实现_Javascript_Mergesort - Fatal编程技术网

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]);
}