## 数据结构排序算法总结

news/2024/2/23 16:16:54/文章来源:https://blog.csdn.net/weixin_44340277/article/details/135530561

#### 1.直接插入排序

``        int len = nums.length, i = 1, j = 0;for(i=1; i<len; i++){int ele = nums[i];// 插入过程for(j = i-1; j >= 0 && nums[j] > ele; j--)nums[j+1] = nums[j];nums[j+1] = ele;}return nums;``

#### 2.折半插入排序：

``        int i, j, ele, m, low, high, len = nums.length;for (i = 1; i < len; i++){ele = nums[i];// 折半查找low = 0; high = i-1;while (low <= high){m = (low +high) / 2;if(nums[m] > ele)high = m-1;elselow = m+1;}// 排序for (j = i-1; j>=low; j--)nums[j+1] = nums[j];nums[j+1] = ele;}return nums;``

#### 3.冒泡排序：

``        // 外层循环控制趟数for (int i = 0; i < n - 1; i++) {flag =false;// 内层循环进行比较和交换for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {swap(arr[j], arr[j+1]);flag = true;}}}``

#### 4.快速排序：

``    public int partition(int[] nums, int left, int right){int pivot = nums[left];while(left < right){while(left < right && pivot <= nums[right]) right--;nums[left] = nums[right];while(left < right && pivot >= nums[left])left++;nums[right] = nums[left];}nums[left] = pivot;return left;}``
``    public void quickSort(int[] nums, int left, int right){if(left < right){int partition = partition(nums, left, right);quickSort(nums, left, partition-1);quickSort(nums, partition+1, right);}}``

#### 5.选择排序

``    public void selectSort(int[] nums){for(int i=0; i<nums.length; i++){int index = i;int min = nums[i];for(int j=i; j<nums.length; j++){index = nums[j] < min ? j:index;min = nums[j] < min ? nums[j] : min;}nums[index] = nums[i];nums[i] = min;}}``

#### 6.堆排序

``    public void buildHeap(int[] nums, int len){for(int i=(len)/2; i>0; i--){adjust(nums, i, len);}}``

``    public void adjust(int[] nums, int k, int len){int val = nums[k];for(int i=2*k; i<=len; i=i*2){if(i+1 <= len && nums[i+1] > nums[i])i = i+1;if(nums[i] > val){nums[k] = nums[i];k = i;}elsebreak;}nums[k] = val;}``

``    public void heapSort(int[] nums, int len){buildHeap(nums, len);for(int i=len; i>1; i--){swap(nums,1,i);adjust(nums,1,i-1);}}``

#### 7.归并排序

merge 合并函数

``    public void merge(int[] nums, int left, int mid, int right){int[] arr = new int[right-left+1];for(int i=0; i<arr.length; i++){arr[i] = nums[left+i];}int i = 0;int j = mid-left+1;int k = left;while(i <= mid-left && j <= right-left && k <= right){if(arr[i] <= arr[j])nums[k++] = arr[i++];elsenums[k++] = arr[j++];}while(i <= mid-left) nums[k++] = arr[i++];while(j <= right-left)nums[k++] = arr[j++];}``

``    public void mergeSort(int[] nums, int left, int right){if(left < right){int mid = (left + right) / 2;mergeSort(nums, left, mid);mergeSort(nums, mid+1, right);merge(nums,left, mid, right);}}``

### 3种ffmpeg-web端视频直播推流方案

ffmpeg-web端视频直播推流方案 记录了三种 ffmpeg 工具进行推流的方法&#xff0c;并在web端实现直播效果。 一. node-media-server ffmpeg 推流rtmp 安装node-media-server依赖,新建app.js运行 npm install node-media-server -g const NodeMediaServer require(node-…

### e2studio开发三轴加速度计LIS2DW12(4)----测量倾斜度

e2studio开发三轴加速度计LIS2DW12.4--测量倾斜度 概述视频教学样品申请源码下载计算倾斜角度工作原理单轴倾斜检测双轴倾斜检测三轴倾斜检测通信模式管脚定义IIC通信模式速率新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置UART配置UART属性配置设置e2studio堆栈e…

### spring boot mybatis plus mapper如何自动注册到spring bean容器

##Import(AutoConfiguredMapperScannerRegistrar.class) ##注册MapperScannerConfigurer ##MapperScannerConfigurer.postProcessBeanDefinitionRegistry方法扫描注册mapper ##找到mapper候选者 ##过滤mapper 类 候选者 ##BeanDefinitionHolder注册到spring 容器

### stm32学习笔记：USART串口通信

1、串口通信协议&#xff08;简介软硬件规则&#xff09; 全双工&#xff1a;打电话。半双工&#xff1a;对讲机。单工&#xff1a;广播 时钟&#xff1a;I2C和SPI有单独的时钟线&#xff0c;所以它们是同步的&#xff0c;接收方可以在时钟信号的指引下进行采样。串口、CAN和…

### C++ OJ基础

C OJ基础 在学校学习C程序设计基础课程的OJ题目 缺少第二十题 这里写目录标题 C OJ基础习题练习(一)打印图形习题练习(二)数据的输入输出习题练习(三)函数重载习题练习(四)设计矩形类习题练习(五)定义Tree类习题练习(六)完善职工工资类Salary的设计习题练习(七)设计矩形类recta…