Я потратил много времени на то, чтобы выяснить, что у меня нет; отладки и все, но я просто не могу понять, почему мой quicksort пропускает несколько элементов сортировки.Quicksort сортирует все, кроме нескольких элементов
Я скопировал свой код для сортировки и раздела ниже. У меня такое ощущение, что это что-то очень очевидное, я уже смотрю, но я провел бесконечные часы, отлаживая, исследуя и переписывая свой код, и это всегда получается одинаково.
// quicksort the subarray from a[lo] to a[hi]
private void sort(Comparable[] a, int lo, int hi) {
if((hi-lo)>1){
int pivot = partition(a,lo,hi);
sort(a,lo,pivot);
sort(a,pivot+1,hi);
}
}
// partition the subarray a[lo .. hi] by returning an index j
// so that a[lo .. j-1] <= a[j] <= a[j+1 .. hi]
private int partition(Comparable[] a, int lo, int hi) {
//find middle
int pivotIndex = (hi+lo)/2;
//pick pivot
Comparable pivot = a[pivotIndex];
//create left and right pointers
int left = lo, right = hi;
//start comparing
//compare until left passes right
while(left<right){
//while left is less than pivot move on
while(a[left].compareTo(pivot) < 0) left++;
//while right is greater than pivot move on
while(a[right].compareTo(pivot) > 0) right--;
//if the pointers have passed each other we're done
//if a[left] is greater than a[right] swap them
if(a[left].compareTo(a[right]) > 0){
Comparable holder = a[left];
a[left] = a[right];
a[right] = holder;
//increment/decrement
left++; right--;
}
}
return right;
}
Это javascript? : p –
@GrzegorzKaczan довольно уверен, что это не так. перенаправлен в java. –