public static void MergeSortDC(int[] R,int low,int high)
{//用分治法对R[low..high]进行二路归并排序
int mid;
if(low < high && low != high - 1){//区间长度大于1
mid= (low+high)/2 ; //分解
MergeSortDC(R, low, mid);//递归地对R[low..mid)排序
MergeSortDC(R, mid, high); //递归地对R[mid..high]排序
Merge(R,low,mid,high); //组合,将两个有序区归并为一个有序区
}
}//MergeSortD
public static void Merge(int[] r,int low,int mid,int high){
int tLength = high - low ;
System.out.println(high+"\t"+low +"\t" + mid);
int[] c = new int[tLength];
int aI = low, bI = mid,tI = 0;
while(aI < mid && bI < high){
c[tI++] = (r[aI] >= r[bI]) ? r[aI++] : r[bI++];
}
while(aI < mid){
c[tI++] = r[aI++];
}
while(bI < high){
c[tI++] = r[bI++];
}
System.out.println(Arrays.toString(c));
for(int i =0 ; i < c.length; i++){
r[low++] = c[i];
}
}
归并排序自顶向下
最新推荐文章于 2024-01-17 18:08:48 发布