import java.util.Vector;
/**
* Implements the quicksort algorithm.
* Sorts Vectors of objects that implement the Comparable interface.
* The sort is based on Comparable.compare(obj) method.
* @see Comparable
*/
public class QuickSorter {
/**
* performs the sort.
*
* @param vect the Comparable Objects to be sorted.
*/
public static void sort(Vector vect) {
quickSort(vect, 0, vect.size()-1);
insertionSort(vect);
}
static void swap(Vector vect, int i, int j) {
Comparable x = (Comparable)vect.elementAt(i);
vect.setElementAt(vect.elementAt(j), i);
vect.setElementAt(x, j);
}
static void quickSort(Vector vect, int el, int yu) {
if (yu-el < 16) {
return;
}
int m, pivot, other;
m = (yu+el)/2;
if (((Comparable)vect.elementAt(el)).compare(vect.elementAt(yu)) < 0) {
pivot = el;
other = yu;
}
else {
pivot = yu;
other = el;
}
if (((Comparable)vect.elementAt(pivot)).compare(vect.elementAt(m)) < 0) {
if (((Comparable)vect.elementAt(m)).compare(vect.elementAt(other)) < 0) {
pivot = m;
}
else {
pivot = other;
}
}
swap(vect, el, pivot);
int i, j;
i = el + 1;
j = yu - 1;
while (true) {
while (((Comparable)vect.elementAt(el)).compare(vect.elementAt(i)) < 0) {
i++;
}
while (((Comparable)vect.elementAt(el)).compare(vect.elementAt(j)) > 0) {
j--;
}
if (i >= j) {
break;
}
swap(vect, i, j);
i++;
j--;
}
swap(vect, el, j);
if (j - el < yu -i) {
quickSort(vect, el, j-1);
quickSort(vect, i, yu);
}
else {
quickSort(vect, i, yu);
quickSort(vect, el, j-1);
}
}
static void insertionSort(Vector vect) {
int i, j;
for (i = 1; i < vect.size(); i++) {
Comparable x = (Comparable)vect.elementAt(i);
for (j = i;
(j>0) && ((Comparable)vect.elementAt(j-1)).compare(x) > 0;
j--) {
vect.setElementAt(vect.elementAt(j-1), j);
}
vect.setElementAt(x, j);
}
}
You are here: Home > java > How to quickly sort Vector of objects that implement the Comparable interface in java