归并排序

本文详细介绍了一种经典的排序算法——归并排序的基本思想及其Java实现过程。通过递归地将序列分成更小的部分,并将这些部分合并成有序序列来达到整个序列排序的目的。展示了排序前后数据的变化,有助于理解归并排序的运作机制。

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

基本思想:将待排序序列R[0…n-1]看成是n个长度为1的有序序列,将相邻的有序表成对归并,得到n/2个长度为2的有序表;将这些有序序列再次归并,得到n/4个长度为4的有序序列;如此反复进行下去,最后得到一个长度为n的有序序列。

实现代码

public class MergeSort
{
    public static void main(String[] args)
    {
        DataWrap[] dataWraps =
        { new DataWrap(9, ""), new DataWrap(-16, ""), new DataWrap(21, "*"),
                new DataWrap(23, ""), new DataWrap(-30, "*"),
                new DataWrap(-49, "*"), new DataWrap(21, ""),
                new DataWrap(30, "*"), new DataWrap(13, "*"),
                new DataWrap(15, ""), new DataWrap(28, "*"),
                new DataWrap(-2, "*") };
        System.out.println("排序之前:\n" + Arrays.toString(dataWraps));
        mergeSort(dataWraps);
        System.out.println("排序之后:\n" + Arrays.toString(dataWraps));
    }

    public static void mergeSort(DataWrap[] dataWraps)
    {
        sort(dataWraps, 0, dataWraps.length - 1);
    }

    private static void sort(DataWrap[] dataWraps, int left, int right)
    {
        if (left < right)
        {
            // 中间索引
            int center = (left + right) / 2;
            // 对左边数组进行递归
            sort(dataWraps, left, center);
            // 对右边数组进行递归
            sort(dataWraps, center + 1, right);
            System.out.println("left:" + left + " right:" + right);
            // 归并
            merge(dataWraps, left, center, right);
        }
    }

    private static void merge(DataWrap[] dataWraps, int left, int center,
            int right)
    {
        DataWrap[] arrTmp = new DataWrap[dataWraps.length];
        int mid = center + 1;
        int third = left;
        int tmp = left;
        while (left <= center && mid <= right)
        {
            // 将两个数组中取小放入临时数组
            if (dataWraps[left].compareTo(dataWraps[mid]) < 0)
            {
                arrTmp[third++] = dataWraps[left++];
            } else
            {
                arrTmp[third++] = dataWraps[mid++];
            }
        }
        // 原数组剩余部分放入临时数组
        while (mid <= right)
        {
            arrTmp[third++] = dataWraps[mid++];
        }
        while (left <= center)
        {
            arrTmp[third++] = dataWraps[left++];
        }
        // 临时数组内容拷贝到原数组
        while (tmp <= right)
        {
            dataWraps[tmp] = arrTmp[tmp++];
        }
        System.out.println(Arrays.toString(dataWraps));
    }
}

时间复杂度:O(n/log2n)

内容概要:本书《Deep Reinforcement Learning with Guaranteed Performance》探讨了基于李雅普诺夫方法的深度强化学习及其在非线性系统最优控制中的应用。书中提出了一种近似最优自适应控制方法,结合泰勒展开、神经网络、估计器设计及滑模控制思想,解决了不同场景下的跟踪控制问题。该方法不仅保证了性能指标的渐近收敛,还确保了跟踪误差的渐近收敛至零。此外,书中还涉及了执行器饱和、冗余解析等问题,并提出了新的冗余解析方法,验证了所提方法的有效性和优越性。 适合人群:研究生及以上学历的研究人员,特别是从事自适应/最优控制、机器人学和动态神经网络领域的学术界和工业界研究人员。 使用场景及目标:①研究非线性系统的最优控制问题,特别是在存在输入约束和系统动力学的情况下;②解决带有参数不确定性的线性和非线性系统的跟踪控制问题;③探索基于李雅普诺夫方法的深度强化学习在非线性系统控制中的应用;④设计和验证针对冗余机械臂的新型冗余解析方法。 其他说明:本书分为七章,每章内容相对独立,便于读者理解。书中不仅提供了理论分析,还通过实际应用(如欠驱动船舶、冗余机械臂)验证了所提方法的有效性。此外,作者鼓励读者通过仿真和实验进一步验证书中提出的理论和技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值