USING JAVA: Implement the quicksort optimization median-of-three, i.e., first, middle, and last, as pivot for partition. Into this working quicksort algorithm: ( the spacing is bad, sorry) private static void quicksort(int low, int high) { int i = low, j = high; // Get the pivot element from the middle of the list int pivot = arr[(high+low)/2]; // Divide into two lists while (i <= j) { // If the current value from the left list is smaller then the pivot // element then get the next element from the left list while (arr[i] < pivot) i++; // If the current value from the right list is larger then the pivot // element then get the next element from the right list while (arr[j] > pivot) j--; // If we have found a value in the left list which is larger than // the pivot element and if we have found a value in the right list // which is smaller then the pivot element then we exchange the // values. // As we are done we can increase i and j if (i < j) { exchange(i, j); i++; j--; } else if (i == j) { i++; j--; } } // Recursion if (low < j) quicksort(low, j); if (i < high) quicksort(i, high); } Solution Hi, Please find my program: private static void quicksort(int low, int high) { if (low >= high) return; // Selecting the pivot int first = low; int second = arr[(high+low)/2]; int third = arr[high]; // median for first three int pivot = Math.max( Math.min( array[first], array[second]), Math.min( Math.max( array[first], array[second] ), array[third] ) ); while (low <= high) { while (array[low] < pivot) { low++; } while (array[high] > pivot) { high--; } if (low <= high) { // swapping int temp = array[low]; array[low] = array[high]; array[high] = temp; low++; high--; } } // Recursion if (low < j) quicksort(low, j); if (i < high) quicksort(i, high); }.