C++实现直接插入排序法
直接插入排序法是将当前元素按照值大小,插入到有序元素组中的适当位置的一种排序方法。最直观的例子是玩扑克牌斗地主,每次摸牌之前,手上的牌是已经按大小排好顺序的,每次摸的牌都要插入到合适的位置。直接插入排序法的时间复杂度为O(n2n^2n2)
因此,直接插入排序法的基本思想是:
- 对于当前插入的元素a[i],之前的序列a[0],a[1],…,a[i-1]是有序序列;
- 比较a[i]与之前有序序列的值,找到a[i]合适的插入位置;
- 将插入位置之后的元素顺次往后移动一个位置;
- 把a[i]值放入已找到的合适的位置。
在此举一个简单的例子:a[5] = {1,3,4,2,5},要求从小到大排序
当i=3时,a[i]=2,按照上述思想,进行以下步骤:
- ① 比较2与a[2]、a[1]、a[0]
当发现a[i]>a[0],即2>1,此时知道a[3]=2应该插入到a[0]之后的位置 - ②将a[0]到a[i]之间的元素向后移动一个位置
原:a[1]=3,a[2]=4,a[3]=2
现:a[2]=3,a[3]=4 - ③把2放到a[1]处
按照上述思想,代码如下:
void sort_insert(int arr[],int n)
{int i,j;for(i=1;i<n;i++){for(j=i-1;j>=0;j--){if(arr[i]>arr[j])break;}int temp = arr[i];for(int k=i-1;k>j;k--)arr[k+1]=arr[k];arr[j+1] = temp;}
}
测试上述代码:
int _tmain(int argc, _TCHAR* argv[])
{int tmpArray[10] = {2,-3,12,234,4,45,99,123,401,9};cout<<"原始序列:"<<endl;for(int i=0;i<10;i++)cout<<tmpArray[i]<<", ";cout<<"\n直接插入法排序后:"<<endl;sort_insert(tmpArray,10);for(int i=0;i<10;i++)cout<<tmpArray[i]<<", ";getchar(); return 0;
}
欢迎关注知乎专栏:Jungle是一个用Qt的工业Robot
欢迎关注Jungle的微信公众号:Jungle笔记
C++实现直接插入排序法相关推荐
- 数据结构 - 直接插入排序法
数据结构 - 直接插入排序法. 之前的博文已经介绍了 冒泡排序法 和 简单选择排序法. 其实上面两种的基本思路是一样的, 就是通过两层循环, 在每1个内循环中找到1个未排序的极值元素, 然后把这个元素 ...
- 插入排序法(思路及代码实现)
插入排序法思想: 插入排序的基本思想是:把n个待排序的元素看成一个有序表和一个无序表,开始时有序表只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与 ...
- 插入排序法算长度为10的数组
插入排序法的原理: 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入.对于给定的一组记录,初始时假定第一个记录自成一个有序序列,其余记录为无序序列.接着从第二个记录开 ...
- python中怎么比较两个列表的大小_python中对列表元素大小排序(冒泡排序法,选择排序法和插入排序法)—排序算法...
前言 排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列.本文主要讲述python中经常用的三种排序算法,选择排序法 ...
- 排序算法(一)--插入排序法折半插入排序法
约定: 假设数据中有n个数据元素(关键字).排列算法中,将序列中各关键字值依次存放于类型为keytype的数组元素K[1], K[2], K[3], -, K[n]中. 排序结果按照数据元素(关键字) ...
- java插入法排序_java算法之插入排序法
思想:插入排序法的思想就是从数组的第二个元素开始,将数组中的每一个元素按照规则插入到已排好序的数组中以达到排序的目的.一般情况下将数组的第一个元素作为启始元素,从第二个元素开始依次插入.由于要插入到的 ...
- 简单排序(插入排序法)
蒜头君给了一个长度为 N(不大于 500)的正整数序列(正整数的值不超过 N),请将其中的所有奇数取出,并按升序输出. 输入格式 共 2 行: 第 1行为 N: 第 2 行为 N 个正整数,其间用空格 ...
- C语言编程>第二十三周 ③ 下列给定程序中,函数fun的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本算法是:先对字符串中的头两个元素进行排序;然后把第三字符插入
例题:下列给定程序中,函数fun的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序.插入法的基本算法是:先对字符串中的头两个元素进行排序:然后把第三字符插入到前两个字符中,插入后前三个字 ...
- 经典算法之直接插入排序法
活动地址:21天学习挑战赛 文章目录 一.插入排序的基本思想 二.直接插入排序法 1.算法步骤 2.排序过程 3.算法实现 4.复杂度分析 三.每日一练 解题思路 解题代码 一.插入排序的基本思想 每 ...
最新文章
- 解决tab切换的时候,swiper不生效
- 大数据之-Hadoop3.x_Hadoop之HDFS_DataNode的工作机制_原理---大数据之hadoop3.x工作笔记0077
- 详解Android动画之Tween Animation
- SQL 基础面试题(四)
- 铁路售票系统_自助售票机功能升级了!快来掌握新技能!
- 宝德Pr2500y服务器装系统,GP2500-LG41-24V
- php使用 163邮箱接口,G. PHP发送邮件功能实现(使用163邮箱)
- linux系统怎么使用优盘,教你如何使用u盘安装Linux系统
- ld cannot find -lbz2
- Flutter开发:使用SafeArea(安全区域)
- aecmap快捷键_ArcMap常用快捷键一览表
- php 多核cpu,如何利用多核CPU来加速你的Linux命令
- website for all kinds of courses
- 各类排序算法汇总及动画演示(C语言)
- 【Android开发VR实战】二.播放360°全景视频
- hutool 获取某月最后一天_Hutool使用指南
- 如何合并视频?教你把多个视频合并成一个视频
- 记一次盖茨木马应急响应
- 苹果开发者谈APP store现状:二八效应严重 人员浮躁
- mac 无法访问浏览器
热门文章
- 基于springboot的会员后台管理系统
- 三国合肥会战\孙仲谋二战张文远\张辽威震逍遥津\张辽八百骑打破孙仲谋
- android中注册的账号密码储存在,android SharedPreferences实现用户的注册和保存账号密码...
- 如何快速搭建服务器的IP隧道
- sql语句进阶教程(学习sql这一篇就够了)
- 第二百四十一节,Bootstrap进度条媒体对象和 Well 组件
- 大数据陷阱:需要读懂的10个小故事
- 2018年高德地图POI全国数据下载
- VS2017配置OpenCV4.0(Win10环境)
- xxx.exe 中的 0x005d93af (sss.dll) 处最可能的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突