归并算法--MergeSort

本文深入探讨了归并排序算法的核心思想,从数组的分割到合并过程,详细解释了如何通过递归实现数组的分治,并在合并阶段确保排序的正确性。通过实例代码展示,帮助理解归并排序的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三国有云:天下大势分久必合,合久必分。
归并算法就充分表象了这一点,归并算法的基本思想就先将大数组分成小数组,再将小数组分成可以比较大小的两元数组,之后就是合的过程;合的过程中是要对元素进行排序的,两个较小的数组各元素比较后重新排序,再添加到大的数组上,直到合并完成。还是有图好分析问题:
这里写图片描述
百度了一下归并算法,里面只描述归并算法的下半部分,其实分的过程也挺重要,如果不分到最底层,就合得到的结果就不会相同,而且都不知道怎么比较了,之前我没看懂就是在这一点上没有分析到位。如何才能分到最底层,这就需要递归调用了,直到满足条件才开始合的过程。
代码实现:

public class MergeSort implements Sort {

    public void sort(int[] data) {
        int[] temp = new int[data.length];
        mergeSort(data, temp, 0, data.length - 1);
        display(data);
    }

    private void mergeSort(int[] data, int[] temp, int l, int r) {
        int mid = (l + r) / 2;
        if (l == r) //递归到最底层
            return;
        mergeSort(data, temp, l, mid); //通过递归分治数组
        mergeSort(data, temp, mid + 1, r);//通过递归分治数组
        for (int i = l; i <= r; i++) {
            temp[i] = data[i];
        }
        //先排序,后合并
        int n = l;
        int m = mid + 1;
        for (int cur = l; cur <= r; cur++) { 
            if (n == mid + 1)
                data[cur] = temp[m++];
            else if (m > r)
                data[cur] = temp[n++];
            else if (temp[n] < temp[m])
                data[cur] = temp[n++];
            else
                data[cur] = temp[m++];
        }
    }

    public void display(int[] data) {
        for (int i = 0; i < data.length; i++) {
            System.out.print(data[i] + "-----");
        }
    }

    public static void main(String[] args) {
        MergeSort sort = new MergeSort();
        int[] array = { 6,202,100,301,38,8,1 };
        sort.sort(array);
    }

}
内容概要:本文介绍了奕斯伟科技集团基于RISC-V架构开发的EAM2011芯片及其应用研究。EAM2011是一款高性能实时控制芯片,支持160MHz主频和AI算法,符合汽车电子AEC-Q100 Grade 2和ASIL-B安全标准。文章详细描述了芯片的关键特性、配套软件开发套件(SDK)和集成开发环境(IDE),以及基于该芯片的ESWINEBP3901开发板的硬件资源和接口配置。文中提供了详细的代码示例,涵盖时钟配置、GPIO控制、ADC采样、CAN通信、PWM输出及RTOS任务创建等功能实现。此外,还介绍了硬件申领流程、技术资料获取渠道及开发建议,帮助开发者高效启动基于EAM2011芯片的开发工作。 适合人群:具备嵌入式系统开发经验的研发人员,特别是对RISC-V架构感兴趣的工程师和技术爱好者。 使用场景及目标:①了解EAM2011芯片的特性和应用场景,如智能汽车、智能家居和工业控制;②掌握基于EAM2011芯片的开发板和芯片的硬件资源和接口配置;③学习如何实现基本的外设驱动,如GPIO、ADC、CAN、PWM等;④通过RTOS任务创建示例,理解多任务处理和实时系统的实现。 其他说明:开发者可以根据实际需求扩展这些基础功能。建议优先掌握《EAM2011参考手册》中的关键外设寄存器配置方法,这对底层驱动开发至关重要。同时,注意硬件申领的时效性和替代方案,确保开发工作的顺利进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值