1 package org.ibex.classgen.util;
3 // FIXME: Share this with nestedvm somehow
4 public final class Sort {
7 public interface Comparable { public int compareTo(Object o); }
8 public interface CompareFunc { public int compare(Object a, Object b); }
10 private static final CompareFunc comparableCompareFunc = new CompareFunc() {
11 public int compare(Object a,Object b) { return ((Comparable)a).compareTo(b); }
14 public static void sort(Comparable[] a) { sort(a,comparableCompareFunc); }
15 public static void sort(Object[] a, CompareFunc c) { sort(a,c,0,a.length-1); }
17 private static void sort(Object[] a, CompareFunc c, int start, int end) {
19 if(start >= end) return;
21 for(int i=start+1;i<=end;i++) {
24 for(j=i-1;j>=start;j--) {
25 if(c.compare(a[j],tmp) <= 0) break;
33 Object pivot = a[end];
38 while((lo < hi) && c.compare(a[++lo],pivot) < 0) { }
39 while((hi > lo) && c.compare(a[--hi],pivot) > 0) { }
40 tmp = a[lo]; a[lo] = a[hi]; a[hi] = tmp;
43 tmp = a[lo]; a[lo] = a[end]; a[end] = tmp;
45 sort(a, c, start, lo-1);
46 sort(a, c, lo+1, end);