public class QuickSort {
private Comparable[] comparables;
private int number;
public void sort(Comparable[] values) {
//Check for empty or null array
if (values ==null || values.length==0){
return;
}
this.comparables = values;
number = values.length;
quicksort(0, number - 1);
}
private void quicksort(int low, int high) {
int i = low, j = high;
//Get the pivot element from the middle of the list
Comparable pivot = comparables[low + (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 (comparables[i].compareTo(pivot) < 0) {
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 (comparables[j].compareTo(pivot) > 0) {
j--;
}
//If we have found a values in the left list which is larger then
// 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--;
}
}
//Recursion
if (low < j)
quicksort(low, j);
if (i < high)
quicksort(i, high);
}
private void exchange(int i, int j) {
Comparable temp = comparables[i];
comparables[i] = comparables[j];
comparables[j] = temp;
}
}
Comments