public class Quick2 { private static void swap (int [] data, int i, int j) { final int temp = data[i]; data[i]=data[j]; data[j]=temp; } public static void quick_sort (int [] data, int n) { quick_sort (data, 0, n); } public static void quick_sort (int [] data, int first, int n) { if (n>1) { final int pivot_index = partition (data, first, n); final int n1 = pivot_index - first; final int n2 = n-n1-1; quick_sort (data, first, n1); // Sort data[first..pivot_index-1], len=n1 // data[pivot_index] = pivot value quick_sort (data, pivot_index+1, n2); // Sort data[pivot_index+1..first+n-1], len=n2 } } /* paritition data[first..first+n-1] into values <= data[first] and > data[first] */ public static int partition (int [] data, int first, int n) { final int middle = first + n/2; swap (data, middle, first); final int pivot = data[first]; int tooBigIndex=first+1, tooSmallIndex=first+n-1; while (tooBigIndex <= tooSmallIndex) { while (tooBigIndex < first+n && data[tooBigIndex]<=pivot) tooBigIndex++; while (data[tooSmallIndex] > pivot) tooSmallIndex--; if (tooBigIndex