直接上模板类代码,源码出自《算法》第四版
public class Example {
public static void sort(Comparable[] a) {
//详见具体算法
}
private static boolean less(Comparable v, Comparable w) {
return v.compareTo(w) < 0;
}
private static void exch(Comparable[] a, int i, int j) {
Comparable t = a[i];
a[i] = a[j];
a[j] = t;
}
private static void show(Comparable[] a) {
for (Comparable c : a) {
System.out.print(c + " ");
}
}
//测试是否有序
public static boolean isSorted(Comparable[] a) {
for (int i = 1; i < a.length; i++) {
if (less(a[i], a[i - 1])) {
return false;
}
}
return true;
}
}
Tips:
- 大多数情况下,我们的排序代码只会通过两个方法操作数据:
less()方法对元素进行比较,exch()方法将元素交换位置 - 要排序,那就要按照一定的规则,Java中是用Comparable接口实现规则的抽象,当然你也可以手写一个Comparator类,这里谈一谈Comparable接口
int compareTo(T o){
//比较此对象与指定对象的顺序,如果该对象小于,等于,大于指定对象,则分别返回-1,0,1
}
这里我想说的是当返回-1时,说明你当前对象的权重小,如果返回+1 说明当前对象权重大,最后排序是按权重大小排序(从小到大),也就是说指定对象一定在此对象前面。比方说现在有个Integer类型的集合,里面放了[1,2,3],默认返回值如我前面接口描述的那样,同样我期待排序后的结果为升序,将前两个拿出来比一下,Integer[0].compareTo(Integer[1]),结果返回-1,说明Integer[0]=1的权重小,应该排在前面,那么结果还是[1,2,3],如果想得到[3,2,1]的结果,就需要改变返回值。
if (this.age>that.age(指定对象)) return -1
- 排序算法很多,其中 快速排序 及 归并排序 相当重要!(熟练到不假思索!),这里我还很补充选择排序、插入排序、优先队列(刷题时也会用到)、堆排序,至于其他的(如希尔排序等),想了解可以查阅相关资料












网友评论