开源硬件
Arduino
客制化键盘
Arduino_寄存器
二进制运算
寄存器+二进制运算
LCD-逐字显示
密码依次录入
等待输入
WiFi Duck(无线击键注入攻击平台)
WiFi Duc-New
WiFi Duc-Old
蓝牙无线烧录
ESP8266
ESP-NOW
ESP8266看门狗
ESP8266-休眠模式
ESP01/01S使用说明
WIFI_SD
ESP8266-Web服务器
ESP8266-WIFI自动认证
ESP32
ESP32 ADC2
ESP32_PWM
ESP32_CAM
ESP32 小坦克
ESP32_限电保护
Arduino IDE 添加 ESP32
ESP32-iPhone BLE攻击
STM32
STM32F103-虚拟键盘
STC
STC8G1K08(A)
树莓派-触摸屏
Arduino IDE
Arduino_自制库
Arduino库收集
常见排序算法
冒泡排序
选择排序
插入排序
希尔排序
归并排序
快速排序
计数排序
预处理
millis(运行时长)
Arduino IDE 2.X-修改数据位置
Mixly
Mixly安装教程
Mixly 模块介绍
Mixly-添加ESP32CAM支持
Mixly-库定制工具
模块
4G模块连接物联网
GPS模块
语音模块(JQ8900)
安信可VB语音识别
28BYJ-48(5V步进)
FreeRTOS
FreeRTOS-多任务基础
FreeRTOS-任务共享全局变量
FreeRTOS-多核多任务
FreeRTOS-MUTEX
FreeRTOS-常规程序改多任务
FreeRTOS-定时器
LaserGRBL(激光雕刻)
LaserGRBL-GRBL
GRBL-CNC Shield v4
MicroPython
Scratch
Wokwi(在线仿真)
html转无符号数组
待做开源项目
本文档使用 MrDoc 发布
-
+
首页
插入排序
## 插入排序  插入排序,又叫直接插入排序。实际中,我们玩扑克牌的时候,就用了插入排序的思想。 **基本思想:** - 在待排序的元素中,假设前n-1个元素已有序,现将第n个元素插入到前面已经排好的序列中,使得前n个元素有序。按照此法对所有元素进行插入,直到整个序列有序。 - 但我们并不能确定待排元素中究竟哪一部分是有序的,所以我们一开始只能认为第一个元素是有序的,依次将其后面的元素插入到这个有序序列中来,直到整个序列有序为止。 **算法描述:** 一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下: 1. 从第一个元素开始,该元素可以认为已经被排序 2. 取出下一个元素,在已经排序的元素序列中从后向前扫描 3. 如果该元素(已排序)大于新元素,将该元素移到下一位置 4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置 5. 将新元素插入到该位置后 6. 重复步骤2~5 [wokwi_插入排序](https://wokwi.com/projects/332787272014365266)|[wokwi_插入排序](https://wokwi.com/projects/334327049557639763) ```c // 插入排序,InsertSort(数组名,数组长度,[排序方向,默认小到大]) // 在待排序的元素中,假设前n-1个元素已有序,现将第n个元素插入到前面已经排好的序列中,使得前n个元素有序.按照此法对所有元素进行插入,直到整个序列有序 void InsertSort(int array[], int size,boolean forward = true){ // 遍历所有数,循环次数为 数组长度-1 for (int i = 0; i < size - 1; i++){ // 记录有序序列的最后一个元素的下标 int end = i; // 存入待插入的元素 int tmp = array[end + 1]; while (end >= 0){ // 定义存储比较结果的变量 boolean compare; // 根据传入的第三个参数,来确定是正向排序(小到大)还是逆向排序(大到小) if (forward == true){ compare = tmp < array[end]; }else{ compare = tmp > array[end]; } // 比较待插入数是否比比较数小,小的话再往前继续比较,大的话则证明前方的都比它小,待插入应该放置在该比较数右方 if (compare){ // 判定为真,把当前数往后移 array[end + 1] = array[end]; // 序列往前移,进行新的比较 end--; }else{ // 判定为假,数值不动,结束循环 break; } } array[end + 1] = tmp; //代码执行到此位置有两种情况: //1.待插入元素找到应插入位置(break跳出循环到此). //2.待插入元素比当前有序序列中的所有元素都小(while循环结束后到此). } } ```
造物者W
2022年6月13日 13:26
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码