6.归并排序

代码实现:
public class MergeSort {
//归并排序
/*
* 将两个已排序的数组,进行逐步对比,整合为一个有序的数组
* */
public static void process(int arr[],int L,int R){
if(arr==null || arr.length<2)return;
if(L==R)return;
int mid=L+((R-L)>>1);
process(arr,L,mid);
process(arr,mid+1,R);
merge(arr,L,mid,R);
}
public static void merge(int[] arr,int L,int M,int R){
int[] help=new int[R-L+1];
int p1=L;
int P2=M+1;
int i=0;
while (p1<=M && P2<=R){
help[i++]=arr[p1] <= arr[P2]?arr[p1++]:arr[P2++];
}
while (p1<=M){
help[i++]=arr[p1++];
}
while (P2<=R){
help[i++]=arr[P2++];
}
for (i=0;i<help.length;i++)arr[L+i]=help[i];
}
public static void main(String[] args) {
int[] arr=new int[]{5,8,1,6,7,3,2,1};
process(arr,0,arr.length-1);
for (int a:arr) System.out.println(a);
}
}
时间复杂度:O(N*LogN)

浙公网安备 33010602011771号