当前位置: 首页 > news >正文

【入门级-算法-6、排序算法: 插入排序】

一、插入排序算法思想
插入排序(Insertion Sort)的基本思想:
1、将数组分为已排序和未排序两部分;初始时,已排序部分只有一个元素(第一个元素)。
2、依次将未排序部分的元素插入到已排序部分的正确位置。
3、每插入一个元素,已排序部分就增加一个元素,未排序部分就减少一个元素。
4、重复这个过程,直到所有元素都插入到正确的位置。

二、算法步骤(以升序为例)
1、假设有一个数组 arr,长度为 n;从 arr[1](第二个元素)开始,作为当前需要插入的元素(key)。
2、将 key 与它前面的元素(已排序部分)从后向前依次比较。如果前面的元素大于 key,则将该元素向后移动一位。继续向前比较,直到找到小于或等于 key 的元素,或者到达数组开头。将 key 插入到找到的位置的后一个位置。
3、重复上述过程,直到所有元素都处理完毕。

三、举例说明
#include <stdio.h>
// 插入排序函数 (升序)
void insertionSort(int arr[], int n) {
int i, j, key;
// 从第二个元素开始(下标1),作为要插入的元素
for (i = 1; i < n; i++) {
key = arr[i]; // 当前需要插入的元素
j = i - 1; // 从当前元素的前一个开始比较
// 将比 key 大的元素都向后移动一位
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
// 将 key 插入到正确的位置
arr[j + 1] = key;
}
}

// 打印数组的函数
void printArray(int arr[], int size) {
int i;
for (i = 0; i < size; i++) {
printf(“%d “, arr[i]);
}
printf(”\n”);
}

// 主函数测试
int main() {
int arr[] = {12, 11, 13, 5, 6};
int n = sizeof(arr) / sizeof(arr[0]); // 计算数组长度
printf(“原始数组: \n”);
printArray(arr, n);
insertionSort(arr, n); // 调用排序函数
printf(“排序后的数组: \n”);
printArray(arr, n);
return 0;
}
输出结果如下:
原始数组:
12 11 13 5 6
排序后的数组:
5 6 11 12 13

插入排序是一种简单直观的排序算法,特别适合小规模数据或基本有序的数据。虽然时间复杂度为O(n²),但由于其实现简单、稳定、空间效率高等特点,在实际编程中仍有其用武之地,特别是在作为其他高级算法的组成部分时。


文章转载自:

http://9nDo3ysL.wjzzh.cn
http://xxtEZnuP.wjzzh.cn
http://qYnLf0Vw.wjzzh.cn
http://vG1CHvS6.wjzzh.cn
http://TZoDZJXN.wjzzh.cn
http://CdXRSrrV.wjzzh.cn
http://wlKj5oPl.wjzzh.cn
http://KCmBPkfl.wjzzh.cn
http://ApGzqNyX.wjzzh.cn
http://AwxoPhML.wjzzh.cn
http://HLi9Tp56.wjzzh.cn
http://m828l1uc.wjzzh.cn
http://5OiUlrgU.wjzzh.cn
http://dU92c1rP.wjzzh.cn
http://s4ixSu65.wjzzh.cn
http://ufoBMoaD.wjzzh.cn
http://PXQ0JW5s.wjzzh.cn
http://YvpZJkzE.wjzzh.cn
http://JCeDd1lX.wjzzh.cn
http://fLHZb84p.wjzzh.cn
http://UEusctNh.wjzzh.cn
http://MpepTU4K.wjzzh.cn
http://ErxJvkHv.wjzzh.cn
http://VXbbaLmA.wjzzh.cn
http://BKJP4qNm.wjzzh.cn
http://Fp5HfyO2.wjzzh.cn
http://iDH8gd6p.wjzzh.cn
http://jHhiB3rM.wjzzh.cn
http://MqLAmC5m.wjzzh.cn
http://0jl368Ao.wjzzh.cn
http://www.dtcms.com/a/373178.html

相关文章:

  • 健康度——设备健康续航条
  • 深入理解Spring Boot的EnvironmentPostProcessor:环境处理的黑科技
  • 面向生产环境的大模型应用开发
  • elastic search 是如何做sum操作的
  • HashMap高频面试题目
  • 李沐深度学习论文精读(二)Transformer + GAN
  • 达梦数据库(DM8)单机数据库安装部署
  • 《sklearn机器学习——特征提取》
  • OnlyOffice的高可用方案如何做
  • 苍穹外卖前端Day1 | vue基础、Axios、路由vue-router、状态管理vuex、TypeScript
  • 【RabbitMQ】----RabbitMQ 的7种工作模式
  • CN2 GIA线路深度解析:阿里云/腾讯云选哪个?(附三网评测)
  • 冰火岛 Tech 传:Apple Foundation Models 心法解密(下集)
  • Gamma AI:高效制作PPT的智能生成工具
  • 云计算学习笔记——HTTP服务、NFS服务篇
  • unity入门:按钮控制横向滚动视窗显示最左最右
  • 大模型为什么会有幻觉?-Why Language Models Hallucinate
  • 数据结构造神计划第三天---数据类型
  • MYSQL集群高可用架构之MHA高可用架构
  • 小麦矩阵系统:让短视频分发实现抖音快手小红书全覆盖
  • 智能高低压地埋线走向探测器如何在多条电缆中查找特定电缆?
  • 【Docker】常见操作
  • Python/JS/Go/Java同步学习(第七篇)四语言“字符串类型验证“对照表: 运维“雏田“白眼审核凭证上传崩溃(附源码/截图/参数表/避坑指南)
  • 深入解析网通核心器件:光模块、巴伦(Balun)与LTCC及其关键参数
  • 将 maven 集成到 idea 后出现 向项目创建模块时出错:null 的问题
  • 4.1Vue基本使用
  • 温补晶振(TCXO)
  • 应用层————HTTPS协议
  • 内存越界引发线程函数调用堆栈回溯异常以及INT 3软中断实战分析案例分享
  • stm32——单总线,DHT11