基本工具类(所有对象实现Comparable接口)
public class Basic {
public static void merge(Comparable[] a,Comparable[] aux,int start,int mid,int end){
int i = start;
int j = mid+1;
for(int k=start;k<a.length;k++){
aux[k]=a[k];
}
for(int k=start;k<a.length;k++){
if(i>mid){
a[k]=aux[j++];
}else if (j>end) {
a[k]=aux[i++];
}else if (less(aux[i], aux[j])) {
a[k]=aux[i++];
}else {
a[k]=aux[j++];
}
}
}
}
merge()用于归并两个有序数组;
归并排序类
public class Merge {
private static Comparable[] aux;
public static void sort(Comparable[] a){
aux = new Comparable[a.length];
sort(a, 0, a.length-1);
}
private static void sort(Comparable[] a,int start,int end) {
if(start==end) return;
int mid = start+(end-start)/2;
sort(a, start, mid);
sort(a, mid+1, end);
Basic.merge(a, aux, start, mid, end);
}
}
测试类
import java.util.ArrayList;
import java.util.List;
public class TestSort implements Comparable<TestSort> {
public char c;
public TestSort(char c) {
this.c=c;
}
@Override
public int compareTo(TestSort o) {
if(this.c<o.c){
return -1;
}else if(this.c==o.c) {
return 0;
}else {
return 1;
}
}
public static void main(String[] args){
String string = "zxcvbnmadhewijdijskiaqnhkjajndlsiqpoioweiu";
char[] chars = string.toCharArray();
List<TestSort> tList = new ArrayList<TestSort>();
for(char c:chars){
tList.add(new TestSort(c));
}
TestSort[] tSorts = tList.toArray(new TestSort[tList.size()]);
Merge.sort(tSorts);
for(int i=0;i<tSorts.length;i++){
System.out.print(tSorts[i].c);
}
}
}
排序结果
aaabcdddeehhiiiiiijjjjkklmnnnoopqqssuvwwxz