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