public class MergeSort {
public void mergeSort(int[] arr){
if(arr==null||arr.length<2){
return;
}
process(arr,0,arr.length-1);
}
private void process(int[] arr, int l, int r) {
if(l==r){
return;
}
int m=l+(r-l)/2;
process(arr,l,m);
process(arr,m+1,r);
merge(arr,l,m,r);
}
private void merge(int[] arr, int l, int m, int r) {
int[] help=new int[r-l+1];
int index=0;
int p1=l;
int p2=m+1;
while(p1<=m&&p2<=r){
help[index++]=arr[p1]<arr[p2]?arr[p1++]:arr[p2++];
}
while(p1<=m){
help[index++]=arr[p1++];
}
while(p2<=r){
help[index++]=arr[p2++];
}
for (int i = 0; i <help.length ; i++) {
arr[l+i]=help[i];
}
}
@Test
public void test(){
int[] n= new int[]{1,8,3,2,9};
mergeSort(n);
for (int i = 0; i <n.length ; i++) {
System.out.println(n[i]);
}
}
}
手写归并排序
最新推荐文章于 2024-06-13 23:07:13 发布