【发布时间】:2018-08-30 05:18:40
【问题描述】:
我正在尝试用 JavaScript 编写一个快速排序函数。我的代码如下:
function test_quicksort(){
var arr = [0, 9, 8, 7, 6, 5, 4, 3, 2, 1];
arr = quicksort_by_percent_filled(arr);
Logger.log(arr);
}
function quicksort_setup(arr){
var high = arr.size - 1;
arr = quicksort_by_percent_filled(arr, 0, high);
return arr
}
function quicksort_by_percent_filled(arr, low, high){
if (low < high){
var pi = partition(arr, low, high);
quicksort_by_percent_filled(arr, low, pi - 1);
quicksort_by_percent_filled(arr, pi + 1, high);
}
return arr;
}
function partition(arr, low, high){
var pivot = arr[high];
var smaller_boundary = low - 1;
var curr_elem = low;
for (; curr_elem <= high; curr_elem++){
if (ar[curr_elem] < pivot){
smaller_boundary++;
swap(arr, curr_elem, smaller_boundary);
}
}
swap(arr, high, smaller_boundary + 1);
return smaller_boundary + 1;
}
function swap(arr, a, b){
var temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
Logger.log(arr);
}
假设Logger.log(arr) 是一个打印出数组内容的函数,它应该打印出正确排序的数组。但是,每当我运行test_quicksort 时,[0, 9, 8, 7, 6, 5, 4, 3, 2, 1] 就会被打印出来。在我看来,当数组arr 作为参数传递时,我无法编辑它。我该如何解决这个问题?
【问题讨论】:
-
“但是,每当我运行 test_quicksort 时,都会打印出 [0, 9, 8, 7, 6, 5, 4, 3, 2, 1]。在我看来当数组 arr 作为参数传递时,我无法编辑它。” 不,这不是原因。更改作为参数传递给您的数组的内容没有问题。您的代码中只有某种错误。在调试器中逐句调试(浏览器和 IDE 中内置了一个),查看变量的内容并查看逻辑。
-
嗯,你永远不会以任何方式改变
arr -
@JonasW.:我认为这就是
swap所做的,但由于代码不在问题中...... :-|
标签: javascript arrays sorting arguments