Best case O(n*log n)
Worst case O(n^2) -- the worst case is appeared when the worst pivot is taken for every iteration. In this case Quicksort acts very similar to bubble-sort.
public class Quicksort { public static int[] sort(int... array) { Quicksort quicksort = new Quicksort(); return quicksort.sort(array, 0, array.length - 1); } private int[] sort(int[] array, int start, int end) { if (end - start <= 0) { // TODO: Consider other sorting for short arrays return array; } int pivotIndex = selectPivotIndex(array, start, end); pivotIndex = partition(array, start, end, pivotIndex); sort(array, start, pivotIndex - start); sort(array, pivotIndex + 1, end); return array; } private int partition(int[] array, int start, int end, int pivotIndex) { int pivotValue = array[pivotIndex]; int storeIndex = start; swap(array, pivotIndex, end); for (int i = start; i < end; i++) { if (array[i] < pivotValue) { swap(array, i, storeIndex++); } } swap(array, storeIndex, end); return storeIndex; } private void swap(int[] array, int index1, int index2) { int temp = array[index1]; array[index1] = array[index2]; array[index2] = temp; } private int selectPivotIndex(int[] array, int start, int end) { // TODO: Consider better pivot selection return start + (end - start) / 2; } }
No comments:
Post a Comment