今天又写了个合并排序算法,传上来供大家参考一下,还望多提意见!
import java.util.Calendar;
public class MergeSort{
//把排好序的两个数组合并起来
public static void merge(int[] a,int begin,int end,int k){//
int[] a1 = new int[k+1-begin];
int[] a2 = new int[end-k];
System.arraycopy(a,begin,a1,0,a1.length);
System.arraycopy(a,k+1,a2,0,a2.length);
int i=0,j=0;
int n;
for(n=begin;n<=end;n++){
if(i < a1.length && j < a2.length){
if(a1[i] <= a2[j]){
a[n] = a1[i];
i++;
}
else{
a[n] = a2[j];
j++;
}
}else{
break;
}
}
if(i == a1.length){
System.arraycopy(a2,j,a,n,a2.length-j);
}
if(j == a2.length){
System.arraycopy(a1,i,a,n,a1.length-i);
}
}
//把数组拆分之后排序
public static void split(int[] c,int begin,int end){
if(begin != end){
int k = (begin+end)/2;
split(c,begin,k);
split(c,k+1,end);
merge(c,begin,end,k);
}
}
public static void main(String[] args){
int[] arr = new int[1000000];
for(int i=0;i<arr.length;i++){
arr[i] = (int)(arr.length * Math.random());
}
Calendar c = Calendar.getInstance();
System.out.println(c.getTime());
split(arr,0,arr.length-1);
c = Calendar.getInstance();
System.out.println(c.getTime());
}
}