排序算法:归并排序

基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表。即,把待排序序列分为若干个子序列,每个子序列是有序的,然后再把有序子序列合并为整体有序序列。

    private void mergeSort(int[] pArr, int pLeft, int pRight) {
        if (pArr.length < 2) {
            return;
        }
        if (pLeft < pRight) {
            int mid = pLeft + (pRight - pRight) / 2;
            mergeSort(pArr, pLeft, mid);
            mergeSort(pArr, mid + 1, pRight);

            merge(pArr, pLeft, mid, pRight);
        }
    }

    private void merge(int[] pArr, int pLeft, int pMid, int pRight) {
        int[] temp = new int[pRight - pLeft + 1];
        // 左边数组起始指针
        int i = pLeft;
        // 右边数组起始指针
        int j = pMid + 1;
        // 临时数组起始指针
        int k = 0;

        // 先把较小的数放到数组中
        while (i <= pMid && j <= pRight) {
            if (pArr[i] < pArr[j]) {
                temp[k++] = pArr[i++];
            } else {
                temp[k++] = pArr[j++];
            }
        }

        // 把左边剩余的数放到数组中
        while (i <= pMid) {
            temp[k++] = pArr[i++];
        }

        // 把右边剩余的数放到数组中
        while (j <= pRight) {
            temp[k++] = pArr[j++];
        }

        // 把原始数组中相应位置的数据覆盖掉
        for (int l = 0; l < temp.length; l++) {
            pArr[pLeft + l] = temp[l];
        }

    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 1,288评论 0 2
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,237评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,753评论 0 15
  • 概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的...
    Luc_阅读 2,320评论 0 35
  • 大家好,汤mu哥今天遇到了一件很糟糕的事,就是在煮粥的时候忘记看火了,因为在配人煲剧,就忘记自己在煲粥,一下子不知...
    12月32号阅读 760评论 7 7