温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java归并排序算法的原理和作用

发布时间:2021-06-28 16:48:23 来源:亿速云 阅读:295 作者:chen 栏目:大数据

这篇文章主要介绍“java归并排序算法的原理和作用”,在日常操作中,相信很多人在java归并排序算法的原理和作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java归并排序算法的原理和作用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1、定义
    归并排序是一种概念上最简单的排序算法,与快速排序一样,归并排序也是基于分治法的。归并排序将待排序的元素序列分
成两个长度相等的子序列,为每一个子序列排序,然后再将他们合并成一个子序列。合并两个子序列的过程也就是两路归并。

图解(摘自网络)

java归并排序算法的原理和作用

2、代码
public class TestController {

    public static void main(String[] args) {
        int[] a = { 49, 38, 65, 97, 76, 13, 27, 50 };
        mergeSort(a, 0, a.length-1);
        System.out.println("排好序的数组:" + Arrays.toString(a));

    }
    public static void mergeSort(int [] a,int start,int end){

        // 当子序列中只有一个元素时结束递归
        if(start<end){
            // 划分子序列
            int mid=(start+end)/2;

            // 对左侧子序列进行递归排序
            mergeSort(a, start, mid);

            // 对右侧子序列进行递归排序
            mergeSort(a, mid+1, end);

            // 合并
            merge(a, start, mid, end);
        }
    }

    //两路归并算法,两个排好序的子序列合并为一个子序列
    public static void merge(int []a,int left,int mid,int right){
        // 辅助数组
        int []tmp=new int[a.length];

        // p1、p2是检测指针,k是存放指针
        int p1=left,p2=mid+1,k=left;

        while(p1<=mid && p2<=right){
            if(a[p1]<=a[p2])
                tmp[k++]=a[p1++];
            else
                tmp[k++]=a[p2++];
        }

        // 如果第一个序列未检测完,直接将后面所有元素加到合并的序列中
        while(p1<=mid) {
            tmp[k++]=a[p1++];
        }
        // 如果第一个序列未检测完,直接将后面所有元素加到合并的序列中
        while(p2<=right) {
            tmp[k++]=a[p2++];
        }

        // 复制回原素组
        for (int i = left; i <=right; i++) {
            a[i]=tmp[i];
        }
    }
}
3、结果
排好序的数组:[13, 27, 38, 49, 50, 65, 76, 97]

到此,关于“java归并排序算法的原理和作用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI