您的位置:首页 > 其它

递归的归并排序

2015-08-01 16:01 381 查看
算法设计与分析p105页算法6.3归并排序,思想同样很简单,直接上代码

/**
*
* @author pc
* 调用递归的归并排序
*
*/
public class MergeSort6_3 {

public static void MergeSort(int a[],int low,int high){
if(high>low){
int mid=(low+high)/2;
MergeSort(a, low, mid);
MergeSort(a, mid+1, high);
Merge(a,low,mid,high);
}
}

public static void Merge(int a[],int low,int mid,int high){
int len=high-low+1;
int[] b=new int[len];
int k=0;
int t1=low;
int t2=mid+1;
while((t1<=mid)&&(t2<=high)){
if(a[t1]<=a[t2]){
b[k++]=a[t1];
t1++;
}
else{
b[k++]=a[t2];
t2++;
}

}
if(t1<=mid){
while(t1<=mid){
b[k++]=a[t1];
t1++;
}
}
if(t2<=high){
while(t2<=high){
b[k++]=a[t2];
t2++;
}
}
for(int i=0;i<len;i++){
a[i+low]=b[i];//注意这里a数组的下表不应该从0开始
}

}

public static void main(String args[]){
int[] a={2,7,9,4,4,3,19};
MergeSort(a,0,6);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: