CSelectionSorter.java
Created with JBuilder |
/**
* Finds the minimum of A[lo:hi], swaps it with A[lo], recur on A[lo+1:hi].
* Correponds to splitting the array at the low index after putting the minimum
* element there, sort the two parts, and join the sorted part. The join is trivial.
* It's the splitting that requires some work. As such this selection sort belongs
* to the same family as quick sort.
* @author Dung X. Nguyen - Copyright 1999 - all rights reserved.
* @since 11/28/99
*/
public class CSelectionSorter extends ACompareSorter {
public static final CSelectionSorter Singleton = new CSelectionSorter();
private CSelectionSorter() {
}
/**
* Finds the minimum of A[lo:hi] and swaps it with A[lo].
* @param A
* @param lo
* @param hi
* @return lo + 1, and A[lo] is the minimum of A[lo:hi].
*/
protected int split(IOrdered[] A, int lo, int hi) {
int s = lo;
int i = lo + 1;
// Invariant: A[s] <= A[lo:i-1].
// Scan A to find minimum:
while (i <= hi) {
if (A[i].compare(A[s]) == IOrdered.LESS)
s = i;
i++; // Invariant is maintained.
} // On loop exit: i = hi + 1; also invariant still holds; this makes A[s] the minimum of A[lo:hi].
// Swapping A[lo] with A[s]:
IOrdered temp = A[lo];
A[lo] = A[s];
A[s] = temp;
return lo + 1;
}
/**
* @param A A[lo] is the minimum of A[lo:hi], and A[lo+1:hi] is sorted.
* @param lo
* @param s == lo + 1.
* @param hi
*/
protected void join(IOrdered[] A, int lo, int s, int hi) {
}
}
CSelectionSorter.java
Created with JBuilder |