Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment