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