排序

快排

public class Solution {
    public void quickSort(int[] a, int left, int right) {
        int index = partition(a, left, right);
        if(left < index - 1) quickSort(a, left, index - 1);
        if(index + 1 < right) quickSort(a, index + 1, right);
    }

    private int partition(int[] a, int left, int right) {
        int pivot = a[left];
        while(left < right) {
            while(left < right && a[right] >= pivot)
                right--;
            if(left < right)
                a[left++] = a[right];
            while(left < right && a[left] <= pivot)
                left++;
            if(left < right)
                a[right--] = a[left];
        }
        a[left] = pivot;
        return left;
    }
}

归并排序

public class MergeSort {
    //递归版
    public void mergeSortRecursion(int[] a, int left, int right) {
        if(left < right) {
            int mid = (left + right) / 2;
            mergeSort(a, tmpArray, left, mid);
            mergeSort(a, tmpArray, mid+1, right);
            merge(a, tmpArray, left, mid, right);
        }
    }
    //非递归版
    public void mergeSortIteriation(int[] a, int len) {
        int left, mid, right;
        for(int i=1; i<len; i*=2) {
            left = 0;
            while(left + i < len) {
                mid = left + i - 1;
                right = mid + i >= len ? len-1, mid+i;
                merge(a, left, mid, right);
                left = right + 1;
            }
        }
    }

    private void merge(int[] a, int left, int mid, int right) {
        int len = right - left + 1;
        int[] tmpArray = new int[len];
        int leftPos = left, rightPos = mid + 1, tmpPos = 0;
        while(leftPos <= mid && rightPos <= right) {
            if(a[leftPos] <= a[rightPos]) {
                tmpArray[tmpPos++] = a[leftPos++];
            }
            else {
                tmpArray[tmpPos++] = a[rightPos++];
            }
        }

        while(leftPos <= mid) {
            tmpArray[tmpPos++] = a[leftPos++];
        }

        while(rightPos <= right) {
            tmpArray[tmpPos++] = a[rightPos++];
        }

        for(int i=left; i<=right; i++) {
            a[i] = tmpArray[i-left];
        }
    }
}

堆排序

public class HeapSort {
    private static void heapSort(int[] a) {
        for(int i=(a.length-1-1)/2; i>=0; i--) {
            perDown(a, i, a.length);
        }

        for(int i=a.length-1; i>0; i--) {
            int tmp = a[i];
            a[i] = a[0];
            a[0] = tmp;
            perDown(a, 0, i);
        }
    }

    private static void perDown(int[] a, int i, int n) {
        int tmp = a[i], child = 2 * i + 1;
        while(child < n) {
            if(child != n - 1 && a[child] < a[child + 1])
                child++;
            if(tmp < a[child]) {
                a[i] = a[child];
            }
            else {
                break;
            }
            i = child;
            child = 2 * i + 1;
        }
        a[i] = tmp;
    }
}

冒泡排序

public class BubbleSort {
    public static void bubbleSort(int[] a) {
        if(a == null || a.length < 2) return;
        for(int i=a.length-1; i>=0; i--) {
            for(int j=0; j<i; j++) {
                if(a[j] > a[j+1]) {
                    int tmp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = tmp;
                }
            }
        }
    }
}
【四旋翼无人机】具备螺旋桨倾斜机构的全驱动四旋翼无人机:建模与控制研究(Matlab代码、Simulink仿真实现)内容概要:本文围绕具备螺旋桨倾斜机构的全驱动四旋翼无人机展开研究,重点探讨其系统建模与控制策略,结合Matlab代码与Simulink仿真实现。文章详细分析了无人机的动力学模型,特别是引入螺旋桨倾斜机构后带来的全驱动特性,使其在姿态与位置控制上具备更强的机动性与自由度。研究涵盖了非线性系统建模、控制器设计(如PID、MPC、非线性控制等)、仿真验证及动态响应分析,旨在提升无人机在复杂环境下的稳定性和控制精度。同时,文中提供的Matlab/Simulink资源便于读者复现实验并进一步优化控制算法。; 适合人群:具备一定控制理论基础和Matlab/Simulink仿真经验的研究生、科研人员及无人机控制系统开发工程师,尤其适合从事飞行器建模与先进控制算法研究的专业人员。; 使用场景及目标:①用于全驱动四旋翼无人机的动力学建模与仿真平台搭建;②研究先进控制算法(如模型预测控制、非线性控制)在无人机系统中的应用;③支持科研论文复现、课程设计或毕业课题开发,推动无人机高机动控制技术的研究进展。; 阅读建议:建议读者结合文档提供的Matlab代码与Simulink模型,逐步实现建模与控制算法,重点关注坐标系定义、力矩分配逻辑及控制闭环的设计细节,同时可通过修改参数和添加扰动来验证系统的鲁棒性与适应性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值