public class QuickSort { /** * * @param numArr Number array to sort * @param i Lower index of number array to sort * @param k Upper index of number array to sort * @return */ public static int partition(int[] numArr, int i, int k) { int midPoint = i + (k - i) / 2; // why not k / 2 ? int pivot = numArr[midPoint]; boolean done = false; // Lower int l = i; //Higher int h = k; while(!done) { while(numArr[l] < pivot) { l++; } while(pivot < numArr[h]) { h--; } if(l >= h) { done = true; } else { int temp = numArr[l]; numArr[l] = numArr[h]; numArr[h] = temp; l++; h--; } } PrintArray.printIntArray(numArr); return h; } public static void quickSort(int[] numArr, int i, int k) { if(i >= k) { return; } int j = partition(numArr, i, k); quickSort(numArr, i, j); quickSort(numArr, j + 1, k); } public static void main (String[] args) { int[] nums = {5, 6, 2, 10, 4}; System.out.print("Unsorted array : "); PrintArray.printIntArray(nums); quickSort(nums, 0, nums.length - 1); System.out.print("Sorted array : "); PrintArray.printIntArray(nums); } }