import java.util.*; public class Quicksort { static Random rnd = new Random(); public static void quickSort(int[] a, int low, int high) { if (low >= high) return; int separator = a[low + rnd.nextInt(high - low + 1)]; int i = low; int j = high; while (i <= j) { while (a[i] < separator) ++i; while (a[j] > separator) --j; if (i <= j) { int t = a[i]; a[i] = a[j]; a[j] = t; ++i; --j; } } quickSort(a, low, j); quickSort(a, i, high); } // test public static void main(String[] args) { int n = 10_000_000; int[] a1 = rnd.ints(n).toArray(); int[] a2 = a1.clone(); Arrays.sort(a2); long time = System.currentTimeMillis(); quickSort(a1, 0, a1.length - 1); System.out.println(System.currentTimeMillis() - time); if (!Arrays.equals(a1, a2)) throw new RuntimeException(); } }