《算法(第四版)》排序-----模板

本书对排序类算法有一个模板,包括了以下几种方法:

(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)会抛出一个异常。

你可能感兴趣的:(排序,算法)