归并排序--带泛型
//复杂度:O(nlog2n) //n倍的以2为底n的对数
public static <T extends Comparable <? super T>> void msort(T[] arr,T[] tempArr,int start,int end) { 2 3 if(start + 1 < end) { 4 int mid = (start + end) / 2; 5 msort(arr,tempArr,start,mid); 6 msort(arr,tempArr,mid,end); 7 8 if(arr[mid - 1].compareTo(arr[mid]) <= 0) { 9 return; 10 } 11 12 int A,B,C; 13 A = start; 14 B = mid; 15 C = start; 16 while(A < mid && B < end) { 17 if(arr[A].compareTo(arr[B]) < 0) { 18 tempArr[C] = arr[A]; 19 A++; 20 } else { 21 tempArr[C] = arr[B]; 22 B++; 23 } 24 C++; 25 } 26 while(A < mid) { 27 tempArr[C] = arr[A]; 28 A++; 29 C++; 30 } 31 while(B < end) { 32 tempArr[C] = arr[B]; 33 B++; 34 C++; 35 } 36 37 for(int i = start; i != end;++i) { 38 arr[i] = tempArr[i]; 39 } 40 } 41 }
//测试
1 public static void main(String[] args) { 2 3 Integer[] arr = {11,3,5,23,76,435,654,34,543}; 4 Integer[] tempArr = new Integer[arr.length]; 5 msort(arr,tempArr,0,arr.length); 6 for(int i = 0; i != arr.length;++i) { 7 System.out.println(arr[i]); 8 } 9 }