我是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 ]
答案 0 :(得分:2)
您在使用a
代替参数arr
时遇到错字,因此当您使用.slice
时,arr
和a
并不正确同一件事。
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)
因为您正在传递函数,没有结果。
此外,无论如何,您正在传递但未使用