Javascript QuickSort实施错误

时间:2018-07-30 06:31:47

标签: javascript algorithm quicksort

所以这是我最初尝试实现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;
}

0 个答案:

没有答案