package algorihtm;
/*
二分归并算法
递归、非递归
2018年4月29日20点17分
https://blog.csdn.net/tmylzq187/article/details/51816084
https://blog.csdn.net/prstaxy/article/details/8166360
*/
public class MergeSort {
private int[] array;
private int len;
public MergeSort(int[] data){
this.array=data;
len=array.length;
}
public void display(){
for(int i:array){
System.out.print(i+" ");
}
System.out.println();
}
//递归的最底层,每组只有一个数据
public void mergeSortRecursive(int start,int end){
if(start<end){
// System.out.println("between:"+start+end);
int mid = (start+end)/2;
mergeSortRecursive(start,mid);
mergeSortRecursive(mid+1,end);
combineArrayRecursive(start,mid,end);
}
}
//合并数组
public void combineArrayRecursive(int start,int mid,int end){
int len = end-start+1;
int[] tmp = new int[len];
int i = start;
int j=mid+1;
int c=0;
//合并array(start,mid)和array(mid+1,end) 两个有序排列到tmp
while(i<=mid &&j<=end){
if(array[i]<array[j]){
tmp[c]=array[i];
i++;
c++;
}else{
tmp[c]=array[j];
j++;
c++;
}
}
while(i<=mid){
tmp[c]=array[i];
i++;
c++;
}
while(j<=end){
tmp[c]=array[j];
j++;
c++;
}
c=0;
for(int t=start;t<=end;t++,c++){
array[t]=tmp[c];
}
}
public void mergeSort(){
mergeSortRecursive(0,len-1);
}
public static void main(String[] args){
int[] array = new int[] {5,2,35,7,8,9,0};
MergeSort obj = new MergeSort(array);
obj.display();
obj.mergeSort();
obj.display();
}
}
归并排序
最新推荐文章于 2024-07-21 22:27:18 发布