練習問題3.12

やっと分かった。Object型の比較は、Comparable型にキャストしてcompareToを使ってやれば良いって事かな

public abstract class SortHarness {

	private Object[] values;
	private final SortMetrics curMetrics = new SortMetrics();
	private boolean callSort=false;
	
	public final SortMetrics sort(Object[] data){
		if(!callSort){
			callSort=true;
			values = data;
			curMetrics.init();
			doSort();
		}
		return getMetrics();
	}
	
	public final SortMetrics getMetrics(){
		return curMetrics.clone();
	}
	protected final int getDataLength(){
		return values.length;
	}
	
	protected final Object probe(int i){
		curMetrics.probeCnt++;
		return values[i];
	}
	
	protected final int compare(int i, int j){
		curMetrics.compareCnt++;
		Comparable d1 = (Comparable)values[i];
		Comparable d2 = (Comparable)values[j];
		if(d1.compareTo(d2)==0)
			return 0;
		else
			return (d1.compareTo(d2)<0 ? -1 : 1);
	}
	
	protected final void swap(int i, int j){
		curMetrics.swapCnt++;
		Object tmp = values[i];
		values[i] = values[j];
		values[j] = tmp;
	}
	
	protected abstract void doSort();
}
public class SimpleSortHarness extends SortHarness{
	private boolean call=false;
	
	protected void doSort(){
		Object tmp[]={0};
		if(call)
			return;
		else{
			call=true;
			exeSort();
			super.sort(tmp);
		}
	}
	private void exeSort(){
		for(int i = 0; i < getDataLength(); i++){
			for(int j = i + 1; j < getDataLength(); j++){
				if(compare(i,j)>0)
					swap(i,j);
			}
		}
	}
}
public class TestSort {
	static String[] testData = {
						"AB","BC1.3e-2","E79","03.17"
					};
	public static void main(String args[]){
		SortHarness bsort = new SimpleSortHarness();
		SortMetrics metrics = bsort.sort(testData);
		System.out.println("Metrics: " + metrics);
		for(int i = 0; i < testData.length; i++)
			System.out.println("\t" + testData[i]);
	}
}

実行結果

Metrics: 0 probes 6 compares 3 swaps
03.17
AB
BC1.3e-2
E79