/ / Szybkie sortowanie nie działa [zamknięte] - java, quicksort

Szybkie sortowanie nie działa [closed] - java, quicksort

Nie mam żadnych błędów kompilacji, ale nadal nie działa. Wydaje mi się, że ma to związek z granicami tablicy, ale nie jestem w stanie tego naprawić. Próbowałem je zmienić, ale nadal nie działa.

oto mój kod:

public class QuickSort {


public static void main(String[] args) {
int[] A = new int[] {6,2,7,8,1};

quickSort(A,0,A.length-1);
printArray(A);
}

public static void quickSort(int[] A,int P,int r){
int Q = partition(A,P,r);
if (P < Q-1){
quickSort(A,P,Q-1);
}

if (Q < r){
quickSort(A,Q,r);
}

}

public static int partition(int[] A,int P, int r){
int i = P;  //left
int j = r;  //right
int pivot = A[(P+r)/2];
int temp;

while (i <= j){

while (pivot > A[i]){
i++;
}

while (pivot < A[j]){
j--;
}

if (i <= j){
temp = A[i];
A[i] = A[j];
A[j] = temp;
i++;
j--;
}
}
return j;
}
public static void printArray(int[] A){
for (int i = 0; i < A.length;i++){
System.out.println(A[i]);
}
}
}

Parametr P będzie początkiem, a r jest końcem. Wybieram oś od środka

Odpowiedzi:

0 dla odpowiedzi № 1
  1. Twoje nazewnictwo było bardzo nieintuicyjne. Przestrzeganie konwencji nazewnictwa ułatwia zrozumienie kodu dla innych.
  2. w partycji zwróć i zamiast j.
  3. Podczas korzystania z rekurencji należy upewnić się, że się skończy. W dalszym ciągu przetwarzasz tablicę z nonsensownymi granicami w przypadku (r-P <2)! wstaw taką instrukcję zwrotną do metody quicksort

Kod:

public static void quickSort(int[] A,int l,int r) {
if ((r-l)<2) return; //end recursion when there is just one or less elements to sort

int p = partition(A,l,r);

if (l < p-1) { quickSort(A,l,p-1); }

if (p < r) { quickSort(A,p,r); }
}