归并排序

  • 算法思想
    归并排序中使用分治法。将原来的问题划分成子问题,然后递归求解子问题,然后再合并这些子问题的解。
  • 时间复杂度
    归并排序无论什么情况都是O(nlgn)
    可以理解为每个要归并排序的数组大致会被分成lgn层。每一层都有n个元素
    例如归并排序数组
int[] num = {32,2,1,6,23,11,10,43,2};

最开始通过数组下标low=0和长度high=8找到中间值mid=(low+high)/2。此时把原问题分解成2个子问题,然后再对两个子问题进行归并排序。先把0-mid子数组排序,然后mid+1-high排序

public static int[] mergeSort(int[] num,int low,int high) {
        
        int mid = (low+high)/2;
        if (low<high) {
            mergeSort(num, low, mid);
            
            mergeSort(num, mid+1, high);
            
            mergeSort( num, low, mid,high);
        }
        return num; 
    }

    private static void mergeSort(int[] num, int low, int mid, int high) {

        int[] temp = new int[high-low+1];
        int i=low;
        int j=mid+1;
        int k=0;
        while(i<=mid&&j<=high){
            if (num[i]<num[j]) {
                temp[k++]=num[i++];
            }else {
                temp[k++]=num[j++];
            }
        }
        while(i<=mid){
            temp[k++]=num[i++];
        }
        while(j<=high){
            temp[k++]=num[j++];
        }
        
        for (int k2 = 0; k2 < temp.length; k2++) {
            num[k2+low]=temp[k2];
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数据结构与算法--归并排序 归并排序 归并排序基于一种称为“归并”的简单操作。比如考试可能会分年级排名和班级排名,...
    sunhaiyu阅读 929评论 0 6
  • 分治策略 本文包括分治的基本概念二分查找快速排序归并排序找出伪币棋盘覆盖最大子数组 源码链接:https://gi...
    廖少少阅读 1,928评论 0 7
  • 请尊重作者的劳动成果,如需转载请注明出处,谢谢! 如果觉得不错,可以关注我或者点赞,这就是你们对我最大的鼓励! 归...
    QiuZhiFeng阅读 939评论 0 4
  • 归并排序 所谓归并,就是将两个或两个以上的有序表合并成一个新的有序表。如下图所示,有两个已经排好序的有序表A[1]...
    JackChen1024阅读 2,388评论 0 4
  • 动物界的审美还停留在自然状态 颜值经济盛行的人类社会尤其残忍,于是络绎不绝地美好人儿,去韩国那条街,不断的捣腾自己...
    昔子白阅读 220评论 0 0