当前位置:编程学习 > JAVA >>

合并排序算法问题

package sort;

public class MergeSample2 {


public void MergeSort(int a[],int left,int right){
int b[]=new int[right-left+1];
if(left<right){
int i=(left+right)/2;
MergeSort(a, left, i);
MergeSort(a, i+1, right);
Merge(a, b, left, i, right);
Copy(a, b, left, right);
}
}
/**
 * 此类发生逻辑错误!
 * @param c
 * @param d
 * @param l
 * @param m
 * @param r
 */
public void Merge(int c[],int d[],int l,int m,int r){
int i=l,j=m+1 ,k=l;
while((i<=m)&&(j<=r)){
if (c[i]<c[j]) {  //Error!
d[k++]=c[i++];
} else if(c[i]>c[j]){
d[k++]=c[j++];

}
}
if(i>m){
for(int q=j;q<=r;q++){
d[k++]=c[q];
}
}else {
for (int q = i; q < m; q++) {
d[k++]=c[q];
}
}

}

public void Copy(int a[],int b[],int left,int right){

for (int i = left; i <right; i++) {
//System.out.println(i);
a[i++]=b[i++];
}
}

/**
 * 
 * @param data1
 * @param data2
 * @return
 */
/*public static int[] merge(int[] data1,int[] data2){
int[] temp=new int[data1.length+data2.length];
int i=0,j=0,iter=0; 
for(;i<data1.length&&j<data2.length;) { 
if(data1[i]<=data2[j]) { 
temp[iter]=data1[i];
iter++; 
i++; 
}else{
temp[iter]=data2[j];
iter++;
j++;
}

for(;i<data1.length;i++,iter++) { 
temp[iter]=data1[i]; 

for(;j<data2.length;j++,iter++) {
temp[iter]=data2[j];

return temp;
}*/

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[]=new int[]{1,3,2};
for (int i : a) {
System.out.print(i+" ");
}
System.out.println();
MergeSample2 ms2=new MergeSample2();
ms2.MergeSort(a, 0,2);
for (int i : a) {
System.out.print(i+" ");
}
System.out.println();
}

}

这个递归合并排序算法在函数Merge合并数组中出现不合理结果,有大牛能回答不? --------------------编程问答-------------------- 调试一下看看 --------------------编程问答-------------------- 你的Merge出了问题,在递归的第一次merge的时候没问题,b[0]=1,b[1]=3;但到第二次merge的时候,就出问题了,此时又对b[1]赋值,b[1]=2,b[2]没有赋值,为初始值0;所以最后打印结果会是1,2,0.
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,