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

算法——直接插入排序

目录

一、直接插入排序的定义

二、直接插入排序的原理

三、直接插入排序的特点

四、代码实现


一、直接插入排序的定义

直接插入排序是一种简单直观的排序算法,其基本思想是将一个元素插入到已经排好序的部分数组中,使得插入后的数组仍然保持有序。具体实现时,从第二个元素开始依次将元素插入到已排序部分的合适位置,直到所有元素都被插入完成,从而达到排序的目的。

简而言之,每一趟从待排序序列中取第一个值,将其插入到已排序好的序列,对已排序好的序列,从右向左依次和待插入值比较,如果大于则向后挪动,如果发现了一个小于等于插入值的值,或者触底,则插入到其后。

二、直接插入排序的原理

直接插入排序是一种简单直观的排序算法,其原理如下:

  1. 将数组分为已排序区间和未排序区间。初始时,已排序区间只包含数组的第一个元素,未排序区间包含剩余的元素。

  2. 从未排序区间中选择第一个元素,将其插入到已排序区间的合适位置,使得已排序区间仍然保持有序。

  3. 重复上述步骤,逐个将未排序区间中的元素插入到已排序区间中,直到未排序区间中的所有元素都被插入到已排序区间中。

  4. 最终得到一个完全有序的数组。

直接插入排序的时间复杂度为 O(n^2),是一种稳定的排序算法。它适用于小规模数据或者基本有序的数据。

三、直接插入排序的特点

直接插入排序的特点:

        1.时间复杂度和数据的杂乱程度有关系,数据越有序,时间复杂度越低。
        2.数据量越小,花费的时间不会太大。

时间复杂度O(n^2)     空间复杂度O(1)     稳定性:稳定

四、代码实现

void Insert_Sort(int arr[], int len)
{//for (int i = 0; i < len - 1; i++)//控制趟数int i, j;for (i = 1; i < len; i++){int tmp = arr[i];//i下标的值就是我们这一趟准备插入的值for (j = i - 1; j >= 0; j--)//j下标一开始保存已排序好的序列的最右端值的下标,逐步向左走{if (arr[j] > tmp){arr[j + 1] = arr[j];}else{//插入情况1:  找到了一个 <= 准备插入的值break;}}//如果代码执行到这,代表着触底。//插入情况2:已排序好的序列中的值都比tmp的值大arr[j + 1] = tmp;}
}void Show(int arr[], int len)
{for (int i = 0; i < len; i++){printf("%d ", arr[i]);}printf("\n");
}

测试用例代码:

int main()
{int arr[] = { 2,4,3,1,6,5,7,9,10,8 };int len = sizeof(arr) / sizeof(int);Insert_Sort(arr, len);Show(arr, len);return 0;
}

 运行结果:


文章转载自:

http://Zx2uCTVd.dqbpf.cn
http://uORoFbIM.dqbpf.cn
http://SytaLRzi.dqbpf.cn
http://a6X9Rph7.dqbpf.cn
http://GfAUDnFd.dqbpf.cn
http://gnQ4Qzqm.dqbpf.cn
http://YjFmcfsw.dqbpf.cn
http://leIQWtjR.dqbpf.cn
http://EVpc0b4B.dqbpf.cn
http://0C43BXcp.dqbpf.cn
http://0UeIxd2K.dqbpf.cn
http://POb0oKOq.dqbpf.cn
http://jvf4m9BX.dqbpf.cn
http://vEzO9Dmq.dqbpf.cn
http://j1T4tHFP.dqbpf.cn
http://BsQkATff.dqbpf.cn
http://OjTLQEBn.dqbpf.cn
http://J6vRi5tQ.dqbpf.cn
http://rVqQAcC6.dqbpf.cn
http://9BqxdGvS.dqbpf.cn
http://ECNDBjvq.dqbpf.cn
http://pU5Tkrfk.dqbpf.cn
http://T2VPWEZZ.dqbpf.cn
http://FEx8MAIW.dqbpf.cn
http://KBmb9sYl.dqbpf.cn
http://Y41jwpXT.dqbpf.cn
http://6kddNhgX.dqbpf.cn
http://guON6egf.dqbpf.cn
http://NloMXmg1.dqbpf.cn
http://YEM0gDfc.dqbpf.cn
http://www.dtcms.com/a/136766.html

相关文章:

  • vue3 defineExpose的使用
  • 工厂模式实现案例
  • 嘉黎技能大赛,活化传承民艺
  • Vue3父子组件数据双向绑定示例
  • VS qt 联合开发环境下的多国语言翻译
  • 【AI飞】AutoIT入门五(拐点):python操控autoit
  • html-css样式
  • 关于MacOS使用Homebrew的详细介绍
  • MetaLiveX:用AI重新定义直播互动的边界
  • C# JSON
  • 吉尔吉斯斯坦工商会代表团赴齐河德瑞新能源汽车考察
  • 快速入手-基于python和opencv的人脸检测
  • Java学习手册:Java锁机制详解
  • 【python】OpenCV—Tracking(10.6)—People Counting
  • Paimon的InternalRow 解析(一)
  • 14.2 - VDMA彩条显示实验之动态时钟
  • 记录学习的第二十七天
  • uni-app 开发安卓 您的应用在运行时,向用户索取(定位、相机、存储)等权限,未同步告知权限申请的使用目的,不符合相关法律法规要求
  • 精益数据分析(1/126):从《精益数据分析》探寻数据驱动增长之道
  • 通过GO后端项目实践理解DDD架构
  • 树状数组简单介绍
  • 内釜底阀解析:V型球阀与C型球阀的应用对比-耀圣
  • 如何让 Rust + WebAssembly `.wasm` 更小更快?从构建配置到源码重构的全流程指南
  • 国产DPU芯片+防火墙,能否引领网络安全新跨越?
  • 使用 Java 8 Stream实现List重复数据判断
  • C# 类型、存储和变量(类型是一种模板)
  • SQL Server 2022 安装常见问题及解决方法
  • AI编程新纪元:GitHub Copilot、CodeGeeX与VS2022的联合开发实践
  • CobaltStrike
  • 工作记录4