我很想知道这个快速实现有什么问题.
/**
* @param {number[]} nums
* @return {number[]}
*/
var sortArray = function(nums) {
return quicksortWrapper(nums);
};
let quicksortWrapper = function(nums) {
quicksort(nums, 0, nums.length - 1);
return nums;
}
let quicksort = function(arr, lp, rp) {
if (lp < rp) {
let pivot = partition(arr, lp, rp);
quicksort(arr, lp, pivot - 1);
quicksort(arr, pivot + 1, rp);
}
}
let partition = function(arr, lp, rp) {
let pivot = rp;
for (let i = lp; i < rp; i++) {
if (arr[i] < arr[pivot]) {
swap(arr, lp, i);
i++;
lp++;
} else {
i++;
}
}
swap(arr, lp, pivot);
return lp;
}
let swap = function(arr, l, r) {
let temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
}输入为9,12,2,0,代码输出0,9,2,12,但应该输出0,2,9,12。我已经发现,第一个错误的迭代是对快速排序(0、12、2、9、1、3)的调用。
发布于 2022-05-03 16:56:07
我很确定我的错误是在for循环中增加我,这个循环已经在每次迭代开始时增加了我。
https://stackoverflow.com/questions/72091560
复制相似问题