Ошибки реализации JavaScript QuickSort

71
9

Итак, это была моя первоначальная попытка реализовать quickSort, чтобы лучше понять алгоритм, и, похоже, он работает нормально, но второй я перехожу к другому тестовому примеру, он, кажется, ломается и не полностью сортируется. Я не уверен, где проблема в коде, и я попытался выполнить поиск в googling и попытался изменить самый внешний цикл while в hoarePartition до (left <right), но он, похоже, не полностью сортирует массив.

Любые предложения о том, как я могу исправить программу ниже? Спасибо

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;
}

спросил(а) 2018-07-30T09:31:00+03:00 2 года, 3 месяца назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема