问题描述
发了好几次贴解决了好多问题最后我写的代码如下publicclassMergeSort{publicstaticvoidmain(Stringargs[]){int[]arr=setArray();Chargec=newCharge();System.out.println("生成一组10个随机数");print(arr);System.out.println("排列好的数组");c.MergeSort(arr,0,9);print(c.get());}publicstaticvoidprint(int[]Array){//打印一组随机数for(inti=0;i<=9;i++){System.out.print(Array[i]+"t");}}publicstaticint[]setArray(){//生成一组随机数inta[]=newint[10];for(inti=0;i<=9;i++){a[i]=(int)(Math.random()*100);}returna;}}classCharge{privateint[]a=newint[10];privateint[]b=newint[10];publicint[]get(){returnb;}publicvoidMergeSort(int[]Array,intleft,intright){//递归合并数组if(left<right){intmiddle=(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);}}publicint[]Merge(int[]Arr1,int[]Arr2,intl,intm,intr){//合并数组inti=l;intj=m+1;intk=l;while((i<=m)&&(j<=r)){if(Arr1[i]<=Arr1[j])Arr2[k++]=Arr1[i++];elseArr2[k++]=Arr1[j++];}if(i>m)for(intq=j;q<=r;q++)Arr2[k++]=Arr1[q];elsefor(intq=i;q<=m;q++)Arr2[k++]=Arr1[q];returnArr2;}}
但是运行的结果不对。。是我的算法有问题还是java的结构有问题。。最后还有个小问题。。java中是不是不能像C/C++一样传递地址,不用return就可以改变所引入的参数。。还有。。这学期开始学算法。。感觉学的方法不对。。大家有什么好的建议么。。最后谢谢大家了。。
解决方案
解决方案二:
问题是不是处在c.MergeSort(arr,0,9);这句上,执行到这句话后intmiddle=(left+right)/2;this.MergeSort(Array,left,middle);的this.MergeSort(Array,left,middle);有问题。后面的始终都没有执行。因为left永远都是小于right的。
解决方案三:
引用1楼wuda236556254的回复:
问题是不是处在c.MergeSort(arr,0,9);这句上,执行到这句话后intmiddle=(left+right)/2;this.MergeSort(Array,left,middle);的this.MergeSort(Array,left,middle);有问题。后面的始终都没有执行。因为left永远都是小于rig……
我觉得没错啊。。取int型。。总有left==right的时候。。