归并排序

package sort_1;

public class MergeSort1 {

    //利用归并排序算法
    public static void mergeSort(DataWrap[] data)
    {
        sort(data,0,data.length-1);
    }
    /**
     * 
     * @param data 待排序的数组
     * @param left 待排序的数组的第一个元素
     * @param right 待排序数组的最后一个元素
     */
    private static void sort(DataWrap[] data, int left, int right)
    {
        if(left < right)
        {
            int center = (left+right)/2;
            sort(data,left,center);
            sort(data,center+1,right);
            merge(data,left,center,right);
        }
    }
    /**
     * 将两个数组进行归并,归并前两个数组已经有序,归并后依然有序
     * @param data 数组对象
     * @param left 左数组元素的第一个元素的索引
     * @param center center是左数组元素的最后一个索引,center+1是右数组元素的第一个元素的索引
     * @param right 右数组的最后一个索引
     */
    private static void merge(DataWrap[] data,int left, int center, int right)
    {
        DataWrap[] tempArr = new DataWrap[data.length];
        int mid = center +1 ;
        int third = left;//third 记录中间数组的索引
        int temp = left;
        while(left<=center&&mid<=right)
        {
            if(data[left].compareTo(data[mid])<=0)
            {
                tempArr[third++] = data[left++];
            }
            else
            {
                tempArr[third++] = data[mid++];
            }
        }
        //剩余部分依次放入中间数组
        while(mid<=right)
            tempArr[third++] = data[mid++];
        while(left<=center)
            tempArr[third++] = data[left++];
        //将中间数组中的内容复制拷回原数组中
        //(原left~right范围的内容被复制回原数组)
        while(temp<=right)
            data[temp] = tempArr[temp++];
    }
    public static void main(String[] args)
    {
        DataWrap[] data = new DataWrap[]{
                new DataWrap(2,""),
                new DataWrap(5,""),
                new DataWrap(1,""),
                new DataWrap(3,""),
                new DataWrap(6,""),
                new DataWrap(9,""),
                new DataWrap(8,""),
                new DataWrap(4,""),
                new DataWrap(7,""),
                new DataWrap(0,""),
                new DataWrap(11,""),
                new DataWrap(10,""),
        };
        MergeSort1.mergeSort(data);
        System.out.println(java.util.Arrays.toString(data));
    }
    
    
    
}
原文地址:https://www.cnblogs.com/xu-thinking/p/3328198.html