归并排序

归并排序

归并排序分成:分,并两大步骤,使用的分治的思想。

和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。

伪代码

分割

分割需要用到递归。

public static int[] sort(int[] arr,int start,int end){
       //递归函数出口
       //计算分割线,可以根据 
       //划分
    }

合并

合并两个相邻的数组

public static int[] merge(int[] left,int[] right){
        //new一个数组对象result,用于保存合并后的结果
        
        //两数组互相进行对比,把小的放到result
        
        //把剩下的,放到result
    }

java代码实现


public static int[] sort(int[] arr,int start,int end){
    	//递归出口
        if (end-start<=0) return Arrays.copyOfRange(arr,start,end+1);
    	//分割线
        int mid = (end+start) /2;
    	//左右分割,然后将分割的丢进去合并函数中
        return merge(sort(arr,start,mid),sort(arr,mid+1,end));
}

public static int[] merge(int[] left,int[] right){
        int i=0,j=0,k=0;
    	//保存结果是数组
        int[] result = new int[left.length+right.length];
    	//两两对比
        while (i<left.length && j<right.length) {
            if (left[i] <= right[j]) result[k++] = left[i++];
            else result[k++] = right[j++];
        }
    	//剩下也放过去
        while (i<left.length) result[k++] = left[i++];
        while (j<right.length) result[k++] = right[j++];
        return result;
}
posted @   鸭梨的药丸哥  阅读(9)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示