public class QuickSort { private static int comparisonCount = 0; public static void main(String[] args) { for (int i = 0; i < args.length; i++) { System.out.print(args[i] + " "); } System.out.println(); quicksort(args, 0, args.length - 1); System.out.println("Comparison count: " + comparisonCount); for (int i = 0; i < args.length; i++) { System.out.print(args[i] + " "); } } public static void quicksort(String[] list, int start, int end) { if (end > start) { int pivotIndex = (int)(Math.random() * (end - start + 1)) + start; int newPivotIndex = partition(list, start, end, pivotIndex); quicksort(list, start, newPivotIndex - 1); quicksort(list, newPivotIndex + 1, end); } } private static int partition(String[] list, int start, int end, int pivotIndex) { String pivotValue = list[pivotIndex]; System.out.print("Pivot: " + pivotValue + " Unsorted: "); for (int i = start; i <= end; i++) { System.out.print(list[i] + " "); } swap(list, pivotIndex, end); int storeIndex = start; for (int i = start; i < end; i++) { if (list[i].compareTo(pivotValue) < 0) { swap(list, i, storeIndex); storeIndex++; } comparisonCount++; } swap(list, end, storeIndex); System.out.print(" Sorted: "); for (int i = start; i <= end; i++) { System.out.print(list[i] + " "); } System.out.println(); return storeIndex; } public static void swap(String[] list, int first, int second) { String temp = list[first]; list[first] = list[second]; list[second] = temp; } }