排序_冒泡排序

package com.zsx.algorithm.sort;

import java.util.Arrays;

/**
 * @author Zsx
 * 冒泡排序
 * 双层嵌套循环,时间复杂度 O(n^2)
 * 判断过程示例:
 * 初始数据:[6,5,4,3,2,1]
 * 从小到大排序
 * 第一遍排序:遍历 长度=length 的数组,将大的和小的通过临时变量交换位置,直到遍历完成,遍历后数组如下: [5,4,3,2,1,6]
 * 第二遍排序:遍历 长度=length-1 的数组,因为最大值已经是最后一个了,所以只需要遍历前面 lengt-1 ,遍历后数组如下: [4,3,2,1,5,6]
 * 第三遍排序:遍历 长度=length-2 的数组,结果:[3,2,1,4,5,6]
 * 第四遍排序:遍历 长度=length-3 的数组,结果:[2,1,3,4,5,6]
 * 第五遍排序:遍历 长度=length-4 的数组,结果:[1,2,3,4,5,6]
 * ...故执行length-1次排序,每次排序遍历只遍历前 length-1-n的数,将最大值放到遍历数据的最后一位,n再+1
 * <p>
 * 优化点:当执行某次排序的遍历,发现没有元素交替。说明已经是排好序的,则直接跳出方法
 * @Time 2021/6/18 15:10
 */
public class BubblesSort {


    public static void main(String[] args) {
        //需要排序的数组
        int[] arr = {1, 3, 2, 4, 20, 5, 7, 1, 2, 24, 9};


        System.out.println("初始数据:" + Arrays.toString(arr));
        System.out.println();

        BubblesSort bubblesSort = new BubblesSort();
        //正常排序
        bubblesSort.sort(arr);

        System.out.println();

        //优化后的排序
        bubblesSort.sort1(arr);

        System.out.println();
        System.out.println("最终结果:" + Arrays.toString(arr));
    }


    /**
     * 正常冒泡排序
     *
     * @param arr 需要排序的数组
     */
    public void sort(int[] arr) {
        //定义临时变量-->用于交换
        int temp;
        //排序过n次 -->每次排序少遍历最后的n个数据
        int n = 0;

        //执行length-1次排序
        for (int i = 0; i < arr.length - 1; i++) {

            //每次排序遍历 length - 1 - n
            for (int j = 0; j < arr.length - 1 - n; j++) {
                //元素交替
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
            System.out.println("遍历第" + i + "次:" + Arrays.toString(arr));
            n++;
        }
    }

    /**
     * 冒泡排序优化
     *
     * @param arr 需要排序的数组
     */
    public void sort1(int[] arr) {
        //定义临时变量-->用于交换
        int temp;

        //排序过n次 -->每次排序少遍历最后的n个数据
        int n = 0;

        //是否已经排序好了
        boolean isSorted = true;

        //执行length-1次排序
        for (int i = 0; i < arr.length - 1; i++) {

            //每次排序遍历 length - 1 - n
            for (int j = 0; j < arr.length - 1 - n; j++) {
                //元素交替
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;

                    //每次元素交替,isSorted就变为false
                    isSorted = false;
                }

            }
            System.out.println("遍历第" + i + "次:" + Arrays.toString(arr));
            //验证本次是否发生元素交替(也就是验证是否已经是排好序的数组)
            if (isSorted) {
                //无需再遍历
                System.out.println("第" + i + "次遍历提前完成");
                return;
            }

            //重置
            isSorted = true;
            n++;
        }
    }


}
正常排序结果:

在这里插入图片描述

优化排序结果:

在这里插入图片描述

【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器模拟器的研究展开,重点介绍基于Matlab代码实现的四轴飞行器动力学建模与仿真方法。研究构建了考虑非线性特性的飞行器数学模型,涵盖姿态动力学与运动学方程,实现了三自由度(滚转、俯仰、偏航)的精确模拟。文中详细阐述了系统建模过程、控制算法设计思路及仿真结果分析,帮助读者深入理解四轴飞行器的飞行动力学特性与控制机制;同时,该模拟器可用于算法验证、控制器设计与教学实验。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及无人机相关领域的工程技术人员,尤其适合从事飞行器建模、控制算法开发的研究生和初级研究人员。; 使用场景及目标:①用于四轴飞行器非线性动力学特性的学习与仿真验证;②作为控制器(如PID、LQR、MPC等)设计与测试的仿真平台;③支持无人机控制系统教学与科研项目开发,提升对姿态控制与系统仿真的理解。; 阅读建议:建议读者结合Matlab代码逐模块分析,重点关注动力学方程的推导与实现方式,动手运行并调试仿真程序,以加深对飞行器姿态控制过程的理解。同时可扩展为六自由度模型或加入外部干扰以增强仿真真实性。
基于分布式模型预测控制DMPC的多智能体点对点过渡轨迹生成研究(Matlab代码实现)内容概要:本文围绕“基于分布式模型预测控制(DMPC)的多智能体点对点过渡轨迹生成研究”展开,重点介绍如何利用DMPC方法实现多智能体系统在复杂环境下的协同轨迹规划与控制。文中结合Matlab代码实现,详细阐述了DMPC的基本原理、数学建模过程以及在多智能体系统中的具体应用,涵盖点对点转移、避障处理、状态约束与通信拓扑等关键技术环节。研究强调算法的分布式特性,提升系统的可扩展性与鲁棒性,适用于多无人机、无人车编队等场景。同时,文档列举了大量相关科研方向与代码资源,展示了DMPC在路径规划、协同控制、电力系统、信号处理等多领域的广泛应用。; 适合人群:具备一定自动化、控制理论或机器人学基础的研究生、科研人员及从事智能系统开发的工程技术人员;熟悉Matlab/Simulink仿真环境,对多智能体协同控制、优化算法有一定兴趣或研究需求的人员。; 使用场景及目标:①用于多智能体系统的轨迹生成与协同控制研究,如无人机集群、无人驾驶车队等;②作为DMPC算法学习与仿真实践的参考资料,帮助理解分布式优化与模型预测控制的结合机制;③支撑科研论文复现、毕业设计或项目开发中的算法验证与性能对比。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注DMPC的优化建模、约束处理与信息交互机制;按文档结构逐步学习,同时参考文中提及的路径规划、协同控制等相关案例,加深对分布式控制系统的整体理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值