if (left >= right) {
return;
}
int index = partition(array, left, right);
quickSort(array, left, index - 1);
quickSort(array, index + 1, right);
}
private static int partition(int[] array, int left, int right) {
// Левый и правый индексы просмотра
int i = left, j = right + 1;
// Опорный элемент
int v = array[left];
// Просмотр справа, просмотр слева, проверка на завершение и обмен
while (true) {
while (array[++i] < v) {
if (i == right) {
break;
}
}
while (v < array[--j]) {
if (j == left) {
break;
}
}
if (i >= j) {
break;
}
swap(array, i, j);
}
swap(array, left, j);
return j;
}
}