public static void quicksort(int [] A){
quickSortRec(A, 0, A.length-1);
}
public static void quickSortRec(int [] A, int p, int r){
if (p < r){
int q = Partition(A, p, r);
quickSortRec(A, p, q-1);
quickSortRec(A, q+1, r);
}
}
public static int Partition(int[] A, int p, int r){
int x = A[r];
int i = p-1;
int j = p;
while (j < r){
if (A[j] <= x){
i++;
int tmp = A[i];
A[i] = A[j];
A[j] = tmp;
}
j++;
}
int tmp = A[i+1];
A[i+1] = A[r];
A[r] = tmp;
return i+1;
}