19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage junit.runner;
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.*;
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A custom quick sort with support to customize the swap behaviour.
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * NOTICE: We can't use the the sorting support from the JDK 1.2 collection
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * classes because of the JDK 1.1.7 compatibility.
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} - Not needed for 1.0 SDK
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Sorter {
12f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot    public static interface Swapper {
13f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot        public void swap(Vector values, int left, int right);
14f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot    }
15f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot
16f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot    public static void sortStrings(Vector values , int left, int right, Swapper swapper) {
17f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot        int oleft= left;
18f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot        int oright= right;
19f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot        String mid= (String)values.elementAt((left + right) / 2);
20f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot        do {
21f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot            while (((String)(values.elementAt(left))).compareTo(mid) < 0)
22f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot                left++;
23f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot            while (mid.compareTo((String)(values.elementAt(right))) < 0)
24f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot                right--;
25f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot            if (left <= right) {
26f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot                swapper.swap(values, left, right);
27f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot                left++;
28f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot                right--;
29f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot            }
30f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot        } while (left <= right);
31f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot
32f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot        if (oleft < right)
33f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot            sortStrings(values, oleft, right, swapper);
34f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot        if (left < oright)
35f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot            sortStrings(values, left, oright, swapper);
36f1253cd68a1ef45f4bb0c15d3e2834ca8f91e03fBrett Chabot    }
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
38