当我从其他功能中使用Javascript排序时不起作用

时间:2019-12-03 14:55:58

标签: javascript sorting


我是Java语言的新手,但遇到了这个奇怪的问题:
当从另一个“ sort”函数调用“ bubbleSort”函数时,该函数应该克隆该数组并返回一个新的排序数组-我得到的结果不正确。

我很高兴知道问题出在哪里,我一直在尝试其他方法来克隆数组,例如while循环,切片,[... a]等,但仍然无法理解问题所在是。

function bubbleSort(arr, compareFunction = comparator()) {
  var len = arr.length;
  console.log("bubble!!");
  for (var i = 0; i < len; i++) {
    for (var j = 0; j < len - i - 1; j++) {
      if (comparator(a[j], a[j + 1]) == 1) {
        var temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
  return arr;
}
function sort(a, sorter, compareFunction = comparator()) {
  return sorter(a, comparator);
}
function sortNumbers(a) {
  var arrClone = a.slice(0);
  arrClone = sort(arrClone, bubbleSort);
  return arrClone;
}
function comparator(a, b) { if (a < b) return -1; else if (a > b) return 1; else return 0; }


// when i'm using any of the following:
var a = [33, 103, 3, 726, 200, 984, 198, 764, 9];
console.log(bubbleSort(a));
a = [33, 103, 3, 726, 200, 984, 198, 764, 9];
console.log(bubbleSort(a, comparator));
a = [33, 103, 3, 726, 200, 984, 198, 764, 9];
console.log(sort(a, bubbleSort));
// I'm getting the desired result:
// [ 3, 9, 33, 103, 198, 200, 726, 764, 984 ]

// But when i'm using:

a = [33, 103, 3, 726, 200, 984, 198, 764, 9];
console.log(sortNumbers(a));
// I'm getting:
// [ 33, 3, 103, 200, 726, 198, 984, 9, 764 ]

当我使用以下任何一项时:

var a = [33, 103, 3, 726, 200, 984, 198, 764, 9];
console.log(bubbleSort(a));
console.log(bubbleSort(a, comparator));
console.log(sort(a, bubbleSort));

我得到了想要的结果:

 [ 3, 9, 33, 103, 198, 200, 726, 764, 984 ]

但是当我使用时:

console.log(sortNumbers(a));

我得到:

[ 33, 3, 103, 200, 726, 198, 984, 9, 764 ]

2 个答案:

答案 0 :(得分:2)

您在使用a代替参数arr时遇到错字,因此当您使用.slice时,arra并不正确同一件事。

function bubbleSort(arr, compareFunction = comparator()) {
 //...
      if (comparator(a[j], a[j + 1]) == 1) {
 //...
}

var a = [33, 103, 3, 726, 200, 984, 198, 764, 9];

答案 1 :(得分:1)

 function sort(a, sorter, compareFunction = comparator()) 

应该是

 function sort(a, sorter, compareFunction = comparator) 

因为您正在传递函数,没有结果。

此外,无论如何,您正在传递但未使用