本书对排序类算法有一个模板,包括了以下几种方法:
(1)sort():这个方法里面实现的就是排序的算法
(2)less():这个方法里是利用了Comparable接口里的compareTo方法,其中compareTo方法对于本对象与传入的比较对象小于,等于,大于,分别返回负数,0,正数
这个方法如果compareTo方法结果为负数就返回true,否则返回false
(3)exch():这个方法就是exchange,交换,用的传统方法,先找个temp,然后三者交换
(4)show():将数组里的元素进行打印
(5)main():
模板具体如下
public class Selection {观察之后可以发现:
public static <T> void sort(Comparable<T>[] a){
//具体的排序算法实现代码
}
private static <T>boolean less(Comparable<T> v, Comparable<T> w){
return v.compareTo((T) w) < 0;
}
private static <T> void exch(Comparable<T>[] a, int i, int j){
Comparable<T> t = a[i];
a[i] = a[j];
a[j] = t;
}
private static <T> void show(Comparable<T>[] a){
//在单行中打印数组
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + "");
System.out.println();
}
}
public static <T> boolean isSorted(Comparable<T>[] a){
//测试数组元素是否有序
for (int i = 0; i < a.length; i++) {
if(less(a[i], a[i-1]))
return false;
}
return true;
}
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
//String[] a = {"S","O","R","T","E","X","A","M","P","L","E"};
sort(a);
assert isSorted(a);
show(a);
}
}
排序算法的模板传入的参数规定了,都得是实现了Comparable接口的数据类型,这样就可以直接按照各自的数据比较习惯进行排序了
v.compareTo(w)<0这样的代码,如果v和w无法进行比较,或者两者之一有一个null,则v.compareTo(w)会抛出一个异常。