`
f303153041
  • 浏览: 44822 次
社区版块
存档分类
最新评论

JAVA 归并排序

阅读更多
package ge.retain.util;

import java.util.Arrays;

public class SortUtils {
     public static void main(String args[]){
    int[] array = {1,3,2,4,5,7,6,9,8,10,12,11}; //12 个元素   下标0-11
    int temp[]  = new int[array.length]; //创建临时数组
    MergeSort(array,0,array.length-1,temp);
   
     }
     public static void  MergeSort(int array[],int start,int end,int[] temp){
    if(start < end){
    int mid  = (start+end)/2; //mid 5
    MergeSort(array,start,mid,temp); //0-5
             MergeSort(array,mid+1, end,temp);//6-11
             mergearray(array,start,mid,end,temp);
             System.out.println(Arrays.toString(array));
    }
     }
    
     public static void mergearray(int a[], int first, int mid, int last, int temp[])
     {
     int i = first, j = mid + 1;
     int m = mid, n = last;
     int k = 0;
     while (i <= m && j <= n)
     {
     if (a[i] <= a[j])        //依次比较前半部分和后半部分的元素 如果前半部分的元素值比后半部分小,就把该值放到临时数组中                         //
     temp[k++] = a[i++];      //同时 前半部分 下标后移一位  临时数组下标后移一位
     else
     temp[k++] = a[j++];      //反之 后半部分下标后移一位  临时数组下标后移一位  
     }

     while (i <= m)           //依次把前半部分剩余值放入临时数组
     temp[k++] = a[i++];

     while (j <= n)           //依次把前后部分剩余值放入临时数组
     temp[k++] = a[j++];

     for (i = 0; i < k; i++)   //把临时数组依次复制到原始数组
     a[first + i] = temp[i];
     }
    
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics