java中归并排序

package helllo;
public class Merge__Sort {
public static int Merge(int a[],int i,int mid,int j){
int lmin=i;
int lmax=mid;
int rmin=mid+1;
int rmax=j;
int temp[]=new int[20];
int k;
for( k=0;lmin<=lmax &&rmin<=rmax;k++){
if(a[lmin]<a[rmin])
temp[k]=a[lmin++];
else
temp[k]=a[rmin++];
}
if(lmin<=lmax){
for(int s=lmin;s<=lmax;s++)
temp[k]=a[s];
k++;
}
if(rmin<=rmax){
for(int q=rmin;q<=rmax;q++)
temp[k]=a[q];
k++;
}
for(int w=0;w<k;w++)
a[w+i]=temp[w];
return 0;
}
public static int MergeSort(int a[],int i,int j){
if(i<j){
int mid=(i+j)/2;
MergeSort(a,i,mid);
MergeSort(a,mid+1,j);
Merge(a,i,mid,j);
}
return 0;
}
public static void main(String[] args) {
//int []a=new int[20];
int a[]={1,8,2,6,5,4};
System.out.println("归并之前的排序为");
for(int rr=0;rr<=5;rr++)
System.out.printf("%d\t", a[rr]);
System.out.printf("\n");
MergeSort(a,0,5);
System.out.println("归并之后的排序为");
for(int rr=0;rr<=5;rr++)
System.out.printf("%d\t", a[rr]);
System.out.printf("\n");
}
}

错误结果:
归并之前的排序为
1 8 2 6 5 4
归并之后的排序为
1 2 4 6 4 8

1、归并排序实现:
  
public static void main(String[] args) {
int a[]={1,8,2,6,5,4};
int[] arr= sort(a,0,a.length-1);
for(int rr=0;rr<=5;rr++)
System.out.printf("%d\t", arr[rr]);
System.out.printf("\n");
}
public static int[] sort(int[] a,int low,int high){
    int mid = (low+high)/2;
    if(low<high){
        sort(a,low,mid);
        sort(a,mid+1,high);
        //左右归并
        merge(a,low,mid,high);
    }
    return a;
}
 
public static void merge(int[] a, int low, int mid, int high) {
    int[] temp = new int[high-low+1];
    int i= low;
    int j = mid+1;
    int k=0;
    // 把较小的数先移到新数组中
    while(i<=mid && j<=high){
        if(a[i]<a[j]){
            temp[k++] = a[i++];
        }else{
            temp[k++] = a[j++];
        }
    }
    // 把左边剩余的数移入数组 
    while(i<=mid){
        temp[k++] = a[i++];
    }
    // 把右边边剩余的数移入数组
    while(j<=high){
        temp[k++] = a[j++];
    }
    // 把新数组中的数覆盖nums数组
    for(int x=0;x<temp.length;x++){
        a[x+low] = temp[x];
    }
}

2、简单的数组排序
public static void main(String[] args) {
int a[]={1,8,2,6,5,4};
Arrays.sort(a);
for(int rr=0;rr<=5;rr++)
System.out.printf("%d\t", a[rr]);
System.out.printf("\n");
}

温馨提示:答案为网友推荐,仅供参考
相似回答