Java实现合并排序,该算法的时间复杂度为O(nlogn)
public class Test {
static int[] array={58,76,32,11,99,45,67,558,721,111};
//拆分这个数组,这个过程时间复杂度记为O(logn)
public void split_arr(int[] arr,int start,int end){
if(start<end){
int mid=(start+end)/2;
split_arr(arr, start, mid);
split_arr(arr, mid+1, end);
combin_arr(arr,mid,start,end);
}
}
//合并并比较每个拆分下来的小数组,每个模块需要n次比较,整个算法复杂度为O(nlogn)
public void combin_arr(int[] arr, int mid, int start, int end) {
int st=start,en=end,mid2=mid+1;
int c=0;
//暂时存储排好序的数据
int[] arr_2=new int[end-start+1];
while(st<=mid&&mid2<=en){
if(arr[st]<arr[mid2]){
arr_2[c]=arr[st];
st++;
c++;
}else{
arr_2[c]=arr[mid2];
mid2++;
c++;
}
}
while(st<=mid){
arr_2[c]=arr[st];
st++;
c++;
}
while(mid2<=en){
arr_2[c]=arr[mid2];
mid2++;
c++;
}
for(int i=start,j=0;i<=end;i++,j++){
array[i]=arr_2[j];
}
}
public static void main(String[] args) {
new Test().split_arr(array, 0, array.length-1);
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
System.out.println();
}
}