请教:合并排序问题???
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++){