发了好几次贴  解决了好多问题  最后我写的代码如下public class MergeSort{
public static void main(String args[]){
        int[] arr = setArray();
        Charge c = new Charge();
        System.out.println("生成一组10个随机数");
        print(arr);
System.out.println("排列好的数组");
c.MergeSort(arr,0,9);
print(c.get());
}
public static void print(int[] Array){                                 //打印一组随机数
for(int i=0;i<=9;i++){
System.out.print(Array[i]+"\t");
}
}
public static int[] setArray(){                                        //生成一组随机数
int a[] = new int[10];
for(int i = 0;i <= 9;i++){
a[i] = (int)(Math.random() *100) ;
}
return a;
}}
class Charge{
private int[] a = new int[10];
private int[] b = new int[10];
public int[] get(){
return b;
}
public void MergeSort(int[] Array,int left,int right){                //递归合并数组
if(left<right){
int middle = (left+right)/2;
this.MergeSort(Array,left,middle);
this.MergeSort(Array,middle+1,right);
    this.Merge(Array,this.a,left,middle,right);
System.arraycopy(this.a,0,this.b,0,right-left+1);
}
}
public int[] Merge(int[] Arr1,int[] Arr2,int l,int m,int r){          //合并数组
int i = l;
int j = m+1;
int k = l;
while((i <= m)&&(j <= r)){
if(Arr1[i] <= Arr1[j]) Arr2[k++] = Arr1[i++];
else Arr2[k++] = Arr1[j++];
}
if(i > m)
for(int q = j;q <=r; q++)  Arr2[k++] = Arr1[q];
else for(int q = i; q <= m; q++)  Arr2[k++] = Arr1[q];
return Arr2;
}
}但是运行的结果不对。。是我的算法有问题还是java的结构有问题。。最后还有个小问题。。java中是不是不能像C/C++一样传递地址,不用return就可以改变所引入的参数。。还有。。这学期开始学算法。。感觉学的方法不对。。大家有什么好的建议么。。最后谢谢大家了。。

解决方案 »

  1.   

    问题是不是处在  c.MergeSort(arr,0,9);
    这句上,执行到这句话后  int middle = (left+right)/2;
                         this.MergeSort(Array,left,middle);
    的this.MergeSort(Array,left,middle);
    有问题。后面的始终都没有执行。因为left永远都是小于right的。
      

  2.   

    我觉得没错啊。。取int型。。总有left==right的时候。。