62,614
社区成员
发帖
与我相关
我的任务
分享
private static void mergeSort(Object[] src,
Object[] dest,
int low,
int high,
int off) {
int length = high - low;
// Insertion sort on smallest arrays
if (length < INSERTIONSORT_THRESHOLD) {
for (int i=low; i<high; i++)
for (int j=i; j>low &&
((Comparable) dest[j-1]).compareTo(dest[j])>0; j--)
swap(dest, j, j-1);
return;
}
// Recursively sort halves of dest into src
int destLow = low;
int destHigh = high;
low += off;
high += off;
int mid = (low + high) >>> 1;
mergeSort(dest, src, low, mid, -off);
mergeSort(dest, src, mid, high, -off);
// If list is already sorted, just copy from src to dest. This is an
// optimization that results in faster sorts for nearly ordered lists.
if (((Comparable)src[mid-1]).compareTo(src[mid]) <= 0) {
System.arraycopy(src, low, dest, destLow, length);
return;
}
// Merge sorted halves (now in src) into dest
for(int i = destLow, p = low, q = mid; i < destHigh; i++) {
if (q >= high || p < mid && ((Comparable)src[p]).compareTo(src[q])<=0)
dest[i] = src[p++];
else
dest[i] = src[q++];
}
}
public int compareTo(Object o) {
//把Object o转成Name型,便于比较
Name n = (Name)o;
//我们Name怎么比大小呢?那就直接比比我们的lastName吧,
//怎么比,直接用String的compareTo方法好了,java写好的,不用白不用
int lastCmp = lastName.compareTo(n.lastName);
//看看吧如果lastName比出结果了,那最好罗,如果比出来一样咋办?那我们再比比firstName吧
return
(lastCmp != 0 ? lastCmp : firstName.compareTo(n.firstName));
}
@Override public int compareTo(Object o){
if (o == this) return true;
if (o == null) return false;
if (getClass() != o.getClass()) return false;
Name that = (Name)o;
int lc = lastName.compareTo(that.lastName);
if(lc != 0){
return lc;
}
else{
return firstName.compareTo(that.firstName);
}
}