Evo nešto malo koda. Ja ovo sortiranje upotrbljavam svuda i uvek. Objekti ko se sortiraju treba da implamantiraju Sortable - i milina jedna. Dodao sam i za stringove, ima u donjem delu klase.
Za po
Code:
import java.util.*;
public class ObjectQSorter {
public void sort(Vector v, boolean ascending, int sortKey) {
int size = v.size();
Object arr[] = new Object[size];
for (int i=0; i<size; i++) {
arr[i] = v.elementAt(i);
}
quickSort(arr,0, arr.length -1, ascending, sortKey);
v.removeAllElements();
for (int i=0; i<size; i++) {
v.addElement(arr[i]);
}
}
public void sort(Vector v, int sortKey) {
sort(v, true, sortKey);
}
public void sort(Vector v) {
sort(v, true, 0);
}
private void quickSort(Object a[], int lo0, int hi0, boolean ascending, int sortKey) {
int lo = lo0;
int hi = hi0;
String mid;
if ( hi0 > lo0) {
mid = ((Sortable)(a[ ( lo0 + hi0 ) / 2 ])).getSortKey(sortKey);
while( lo <= hi ) {
while( ( lo < hi0 ) && (greater(mid,((Sortable) a[lo]).getSortKey(sortKey), ascending))) {
++lo;
}
while( ( hi > lo0 ) && (greater(((Sortable)a[hi]).getSortKey(sortKey),mid, ascending))) {
--hi;
}
if( lo <= hi ) {
swap(a, lo, hi);
++lo;
--hi;
}
}
if( lo0 < hi ) {
quickSort( a, lo0, hi, ascending, sortKey );
}
if( lo < hi0 ) {
quickSort( a, lo, hi0, ascending, sortKey );
}
}
}
public void sortStrings(Vector v, boolean ascending) {
int size = v.size();
String arr[] = new String[size];
for (int i=0; i<size; i++) {
arr[i] = (String) v.elementAt(i);
}
quickSortString(arr,0, arr.length -1, ascending);
v.removeAllElements();
for (int i=0; i<size; i++) {
v.addElement(arr[i]);
}
}
public void sortStrings(Vector v) {
sortStrings(v, true);
}
private void quickSortString(String a[], int lo0, int hi0, boolean ascending) {
int lo = lo0;
int hi = hi0;
String mid;
if ( hi0 > lo0) {
mid = a[ ( lo0 + hi0 ) / 2 ];
while( lo <= hi ) {
while( ( lo < hi0 ) && (greater(mid, a[lo], ascending))) {
++lo;
}
while( ( hi > lo0 ) && (greater(a[hi],mid, ascending))) {
--hi;
}
if( lo <= hi ) {
swap(a, lo, hi);
++lo;
--hi;
}
}
if( lo0 < hi ) {
quickSortString( a, lo0, hi, ascending);
}
if( lo < hi0 ) {
quickSortString( a, lo, hi0, ascending);
}
}
}
private void swap(Object a[], int i, int j) {
Object T;
T = a[i];
a[i] = a[j];
a[j] = T;
}
private boolean greater(String s1, String s2, boolean ascending) {
if (ascending) {
return (s1.compareTo(s2) > 0 );
} else {
return (s1.compareTo(s2) < 0 );
}
}
}
A evo i interfeksa Sortable
Code:
public interface Sortable {
public String getSortKey(int type);
}
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji