public class QuickSort {
private int quickSort(int[] data, int left, int right) {
if (left < 0 || right > data.length - 1 || left >= right) {
return -1;
}
int index = left;
int i = left;
int j = right;
while (i < j) {
while (j > i && data[j] >= data[index]) {
j--;
}
while (i < j && data[i] < data[index]) {
i++;
}
if (i < j) {
swap(data, i, j);
} else {
swap(data, index, j);
}
}
return j;
}
private void swap(int[] data, int left, int right) {
int temp = data[left];
data[left] = data[right];
data[right] = temp;
}
public void randomQuickSort(int[] data, int left, int right) {
if (left < 0 || right > data.length - 1 || left >= right) {
return;
}
int index = (int) (Math.random() * (right - left) + left);
swap(data, left, index);
int j = quickSort(data, left, right);
randomQuickSort(data, left, j - 1);
randomQuickSort(data, j + 1, right);
}
}