package lsn1.sjjg.cct.cn.lsn1; import org.junit.Test; /** * 归并排序 适合链表性数据 * Created by linyaokui on 17/12/4. */ public class MergeSort { @Test public void testMerge(){ int[] array=new int[]{1,3,5,7,9,4,8,10}; mergeSort(array,0,array.length-1); for(int i=0;i<array.length;i++){ System.out.print(array[i]+" "); } } //归并排序 public static void mergeSort(int array[],int left,int right){ if(left==right){ return; }else{ int mid=(left+right)/2; mergeSort(array,left,mid);//排好左边 L mergeSort(array,mid+1,right);//排好右边 R merge(array,left,mid+1,right);//再对左右进行合并 D } } //归并排序 0 4 7 public static void merge(int[] array,int left,int mid,int right){ int leftSize=mid-left; int rightSize=right-mid+1; //生成数组 int[] leftArray=new int[leftSize]; int[] rightArray=new int[rightSize]; //填充左边的数组 for(int i=left;i<mid;i++){ leftArray[i-left]=array[i]; } //填充右边的数组 for(int i=mid;i<=right;i++){ rightArray[i-mid]=array[i]; } //合并数组 int i=0; int j=0; int k=left; while(i<leftSize && j<rightSize){ if(leftArray[i]<rightArray[j]){ array[k++]=leftArray[i++]; }else{ array[k++]=rightArray[j++]; } } while(i<leftSize){//左边还有数据没用完 array[k++]=leftArray[i++]; } while(j<rightSize){//右边还有数据没用完 array[k++]=rightArray[j++]; } } }
归并排序
最新推荐文章于 2024-09-13 21:39:37 发布