CS3303-Data Structures Code: import java.util .*; public class QuickSort{ public void quicksort(int[] array){ partialQuick(array); insertionSort(array); reportExchanges(); } private void partialQuick(int[] array){ partialQuick(array, 0, array.length-1); } private void partialQuick(int[] array, int left, int right) { int pivot = partition(array, left, right); if((pivot-left) > perfectPartition) partialQuick(array, left, pivot-1); if((right-pivot) > perfectPartition) partialQuick(array, pivot+1, right); } private int partition(int[] array, int left, int right) { int pivot=findPivot(array, left, right); swap(array, pivot, right); pivot=right; right --; while(left<right ){ while(array[left]<array[pivot]) left++;
while((right != left) && (array[right] > array[pivot])) right --; swap(array, left, right); } swap(array, pivot, right); return left; } private int findPivot(int[] array, int left, int right) { int pivot=(left+right) / 2; if(array[left]>=array[pivot] && array[left] <= array[right] | array[left]>=array[right] && array[left] <= array[pivot]) { pivot=left; } else if(array[left] >= array[pivot] && array[left] <= array[right] | array[left]>=array[right] && array[left] <= array[pivot]){ pivot=right; } return pivot; } private void swap(int[] array, int indexOne, int indexTwo){ int temp=array[indexOne]; array[indexOne] = array[indexTwo]; array[indexTwo] = temp;
exchange++; } public QuickSort(int perfectPartition){ this.perfectPartition = perfectPartition; this.exchange = 0; } private void insertionSort(int[] array){ for(int i = 1; i < array.length; i++){ for (int j = i; (j > 0) && array[j] < array[j-1]; j -- ) { swap(array, j, j - 1); } } } private void reportExchanges(){ System.out.println("There were " + exchange + " exchanges done."); exchange=0; } public QuickSort(){ this(9); } int perfectPartition; int exchange; public static void main(String args[]){ int[] NumElements={ 12,9,4,99,120,1,3,10,23,45,75,69,31,88,101,14,29,91,2,0,77 }; System.out.print("Input value:\t");