日期:2014-05-20  浏览次数:20709 次

请教:合并排序问题???

public class MergeSort {

public void Merge(int[] src,int s,int m,int t){
int temp;
for(int i=s, j=m+1;i<=m&&j<=t;){
if(src[i]>src[j]){
temp=src[i];
src[i]=src[j];
src[j]=temp;
i++;
}else{
j++;
}

}
}

public void MSort(int[] src,int s,int t){
if(s==t){
src[s]=src[t];
}else{
int m=(t+s)/2;
MSort(src,s,m);
MSort(src,m+1,t);
Merge(src,s,m,t);
}
}


public static void main(String[] args) {
// TODO Auto-generated method stub
int[] source=new int[10];
for(int i=0;i<source.length;i++){
source[i]=(int) (Math.random()*10);
}
//输入源数组
for(int i=0;i<source.length;i++){
System.out.print(source[i]+" ");
}
MergeSort ms=new MergeSort();
ms.MSort(source,0,source.length-1);

//输入源数组
System.out.println("output:");
for(int i=0;i<source.length;i++){
System.out.print(source[i]+" ");
}
}

}




运行结果:4 0 6 4 4 4 1 3 4 8 output:
          0 4 6 4 4 1 4 3 4 8 


为什么不对啊,我检查了好几遍,一直找不到错误,请教高手!!!
merge

------解决方案--------------------
你合并方法有问题,自己模拟一下就知道了。这里写了一个。
public void Merge(int[] arrays,int start,int m,int end){
        int length=end-start+1;
        int temp[]=new int[length];//用来存放比较的数组,用完复制回到原来的数组
        int i=start;
        int j=m+1;
        int c=0;
        while(i<=m &&j<=end){
            if(arrays[i]<arrays[j]){
                temp[c]=arrays[i];
                i++;
            }else{
                temp[c]=arrays[j];
                j++;
            }
            c++;
        }
        while(i<=m){
            temp[c++]=arrays[i++];
        }
        while(j<=end){
        temp[c++]=arrays[j++];
        }
        
        c=0;
        for(int t=start;t<=end;t++,c++){