java排序算法_006归并排序

来源:互联网 发布:sam软件 编辑:程序博客网 时间:2024/05/01 12:13
package wzs.sort;import java.util.Arrays;//归并排序(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。public class mergingSort{    public static void main(String[] args)    {        int a[] =        {                10, 3, 5, 7, 9, 1, 4, 2, 6, 8        };        sort(a, 0, a.length - 1);        System.out.println("\n排序后:" + Arrays.toString(a));    }    public static void sort(int[] 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);        }    }    public static void merge(int[] data, int left, int center, int right)    {        int[] tmpArr = new int[data.length];        int mid = center + 1;        // third记录中间数组的索引        int third = left;        int tmp = left;        while (left <= center && mid <= right)        {            // 从两个数组中取出最小的放入中间数组            if (data[left] <= data[mid])            {                tmpArr[third++] = data[left++];            }            else            {                tmpArr[third++] = data[mid++];            }        }        // 剩余部分依次放入中间数组        while (mid <= right)        {            tmpArr[third++] = data[mid++];        }        while (left <= center)        {            tmpArr[third++] = data[left++];        }        // 将中间数组中的内容复制回原数组        while (tmp <= right)        {            data[tmp] = tmpArr[tmp++];        }        System.out.println(Arrays.toString(data));    }}