归并排序
排序就是将一组对象按照某种逻辑顺序重新排列的过程。
在本文中我们使用的操作:
- 遍历数组
- 比较两个对象(本文中所有代码示例中的less方法)
- 交换两个对象 (本文中所有代码示例中的exch方法)
- 将两个有序数组归并成一个有序数组 (文中所有代码中的merge方法)
less 、 exch和merge方法的源码:
private static boolean less(Comparable v, Comparable w) {
return (v.compareTo(w) < 0);
}
private static void exch(Comparable[] a, int i, int j) {
Comparable swap = a[i];
a[i] = a[j];
a[j] = swap;
}
//这个方法将a数组的lo-mid 和 mid-hi两个部分归并排序,aux是用来缓存原数组也就是a的容器
private static void merge(Comparable[] a, Comparable[] aux, int lo, int mid, int hi) {
for (int k = lo; k <= hi; k++) {
aux[k] = a[k];
}
// merge back to a[]
int i = lo, j = mid+1;
for (int k = lo; k <=