归并排序

来源:互联网 发布:娇韵诗淘宝是真是假 编辑:程序博客网 时间:2024/05/18 19:21
/** * 归并排序 * @author TMACJ * */public class MergeSort {   public static void sort(int[] a, int s, int len) {        int size = a.length;        int mid = size / (len << 1);        int c = size & ((len << 1) - 1);        // -------归并到只剩一个有序集合的时候结束算法-------//        if (mid == 0)            return;        // ------进行一趟归并排序-------//        for (int i = 0; i < mid; ++i) {            s = i * 2 * len;            merge(a, s, s + len, (len << 1) + s - 1);        }        // -------将剩下的数和倒数一个有序集合归并-------//        if (c != 0)            merge(a, size - c - 2 * len, size - c, size - 1);        // -------递归执行下一趟归并排序------//        sort(a, 0, 2 * len);    } public static void merge(int[] a, int s, int m, int t) {        int[] tmp = new int[t - s + 1];        int i = s, j = m, k = 0;        while (i < m && j <= t) {            if (a[i] <= a[j]) {                tmp[k] = a[i];                k++;                i++;            } else {                tmp[k] = a[j];                j++;                k++;            }        }        while (i < m) {            tmp[k] = a[i];            i++;            k++;        }        while (j <= t) {            tmp[k] = a[j];            j++;            k++;        }        System.arraycopy(tmp, 0, a, s, tmp.length);    }}

0 0
原创粉丝点击