算法导论-归并排序

    技术2022-05-19  21

    public class MergeSort {  public static void main(String args[]){   int[] data={     50,49,48,47,46,45,44,43,42,41,     40,39,38,37,36,35,34,33,32,31,     30,29,28,27,26,25,24,23,22,21,     20,19,18,17,16,15,14,13,12,11,     10,9,8,7,6,5,4,3,2,1     };   /*    * mergeSort(data,0,中间);    * mergeSort(data,中间,最后);    * merge(data,0,最后);    * */   System.out.println("*********************排序前****************");   for(int i=0;i<data.length;i++){    System.out.print(data[i]+" ");    if(i>9 && i==0)System.out.println();   }   System.out.println();      mergeSort(data,0,data.length/2);   mergeSort(data,data.length/2+1,data.length-1);   merge(data,0,data.length/2,data.length-1);      System.out.println("*********************排序后****************");   for(int i=0;i<data.length;i++){    System.out.print(data[i]+" ");    if(i>9 && i==0)System.out.println();   }   /*int[] data1={1,6,7,8,2,3,4,5,9};   for(int c=0;c<data1.length;c++){    System.out.print(data1[c]);   }   System.out.println("****************");   merge(data1,0,data1.length/2-1,data1.length-1);   System.out.println("*******************");   for(int c=0;c<data1.length;c++){    System.out.print(data1[c]);   }   System.out.println();*/     }

     public static void mergeSort(int[] data, int i, int j) {   if(i<j){    mergeSort(data,i,(i+j)/2);    mergeSort(data,(i+j)/2+1,j);    merge(data,i,(i+j)/2,j);   }  }

     public static void merge(int data[],int i,int m,int j){   /*    * 把data[i..m]和data[m+1..j]归并    * 放到temp1[0..m-i]和temp2[0..j-m-1]中    * 归并到temp[0..j-i]中    * 然后复制到data[i..j]中    *    * */ //  System.out.println(i); //  System.out.println(m); //  System.out.println(j);   int[] temp1,temp2,temp;   temp1=new int[m-i+1+1];   temp2=new int[j-m-1+1+1];   temp=new int[j-i+1]; //  System.out.println("数组长度:"+temp1.length+" "+temp2.length+" "+temp.length);   for(int count=0;count<m-i+1;count++){    temp1[count]=data[count+i];   }   temp1[m-i+1]=10000; //  for(int count=0;count<temp1.length;count++){ //   System.out.print(temp1[count]+" "); //  } //  System.out.println();   for(int count=0;count<j-m-1+1;count++){    temp2[count]=data[count+m+1];   }   temp2[j-m]=10000; //  for(int count=0;count<temp2.length;count++){ //   System.out.print(temp2[count]+" "); //  } //  System.out.println();   int index1=0,index2=0;   for(int count=0;count<j-i+1;count++){    if(temp1[index1]<temp2[index2]){     temp[count]=temp1[index1];     index1++;    }    else{     temp[count]=temp2[index2];     index2++;    }   }   for(int count=0;count<temp.length;count++){    data[i+count]=temp[count];   }  } }


    最新回复(0)