所以这是我最初尝试实现quickSort以便更好地理解算法,并且看起来还不错,但是第二次我改用另一个测试用例,它似乎无法正常工作。我不确定问题在代码内的什么地方,我已经尝试使用Google搜索,并尝试将hoarePartition中最外面的while循环更改为while(left 有关如何修复以下程序的任何建议?
谢谢 var arr = [30, 291, 59323, 2931, 2935023, 1923, 104, 29, 45, 23, 1, 59303, 2, 5, 9, 20, 11, 16];
console.log(arr);
var quickSort = function(arr, left, right) {
left = left || 0;
right = right || arr.length - 1;
var pivot = hoarePartition(arr, left, right);
if (left < pivot - 1) {
quickSort(arr, left, pivot -1);
}
if (right > pivot) {
quickSort(arr, pivot, right);
}
return arr;
}
var sortedArr = quickSort(arr);
console.log(sortedArr);
/////////////////
function hoarePartition(arr, left, right) {
var pivot = Math.floor((left + right) / 2);
while (left <= right) {
while (arr[left] < arr[pivot]) {
left++;
}
while (arr[right] > arr[pivot]) {
right--;
}
if (left <= right) {
//swap
var temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
}
return left;
}