栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

归并排序算法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

归并排序算法

一、基本介绍

       归并排序(MERGE- SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治( divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案修补”在一起,即分而治之)。

二、基本思想

三、动图演示 四、基本步骤

 

分:使用递归将数组不断拆分两个长度相同的子数组,直到子数组中只有一个数字

治:按递归顺序对子数组排序,最后整个数组排序完成

五、代码Demo
public class MergeSort {
    public static void main(String []args){
        int []arr = {6,3,8,5,4,1,2,7};
        test(arr);
        System.out.println(Arrays.toString(arr));
    }
 
    public static void test(int []arr){
        // 在排序前,先建好一个长度等于原数组长度的临时数组,避免递归中频繁开辟空间
        int []temp = new int[arr.length];
        sort(arr,0,arr.length-1,temp);
    }
    // 递归方法 
    private static void sort(int[] arr,int left,int right,int []temp){
        if(left 
六、奇数的归并排序 

1、先把{6,3,5,4,1,2,7}当作数组 {6,3,5,4,1,2}和{7}

2、然后对{6,3,5,4,1,2}归并排序 

3、再对{1,2,3,4,5,6}和{7}排序

七、归并排序的时间复杂度和稳定性

归并排序时间复杂度
归并排序的时间复杂度是O(N*lgN)。
假设被排序的数列中有N个数。遍历一趟的时间复杂度是O(N),需要遍历多少次呢?
归并排序的形式就是一棵二叉树,它需要遍历的次数就是二叉树的深度,而根据完全二叉树的可以得出它的时间复杂度是O(N*lgN)。

归并排序稳定性
归并排序是稳定的算法,它满足稳定算法的定义。
算法稳定性 -- 假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;并且排序之后,a[i]仍然在a[j]前面。则这个排序算法是稳定的!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/572671.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号