插入排序算法是所有排序方法中最简单的一种算法,其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中,最终得到的序列就是已经排序好的数据。

直接插入排序是插入排序算法中的一种,采用的方法是:在添加新的记录时,使用顺序查找的方式找到其要插入的位置,然后将新记录插入。

很多初学者所说的插入排序,实际上指的就是直接插入排序算法,插入排序算法还包括2-路插入排序,表插入排序和

例如采用直接插入排序算法将无序表{3,1,7,5,2,4,9,6}进行升序排序的过程为:

首先考虑记录 3 ,由于插入排序刚开始,有序表中没有任何记录,所以 3 可以直接添加到有序表中,则有序表和无序表可以如图 1 所示:

图 1 直接插入排序(1)

向有序表中插入记录 1 时,同有序表中记录 3 进行比较,1<3,所以插入到记录 3 的左侧,如图 2 所示:

图 2 直接插入排序(2)

向有序表插入记录 7 时,同有序表中记录 3 进行比较,3<7,所以插入到记录 3 的右侧,如图 3 所示:

图 3 直接插入排序(3)

向有序表中插入记录 5 时,同有序表中记录 7 进行比较,5<7,同时 5>3,所以插入到 3 和 7 中间,如图 4 所示:

图 4 直接插入排序(4)

向有序表插入记录 2 时,同有序表中记录 7进行比较,2<7,再同 5,3,1分别进行比较,最终确定 2 位于 1 和 3 中间,如图 5 所示:

图 5 直接插入排序(5)

照此规律,依次将无序表中的记录 4,9 和 6插入到有序表中,如图 6 所示:

图 6 依次插入记录4,9和6

直接插入排序的具体代码实现为:

#include

//自定义的输出函数

void print(int a[], int n ,int i){

printf("%d:",i);

for(int j=0; j<8; j++){

printf("%d",a[j]);

}

printf("\n");

}

//直接插入排序函数

void InsertSort(int a[], int n)

{

for(int i= 1; i

if(a[i] < a[i-1]){//若第 i 个元素大于 i-1 元素则直接插入;反之,需要找到适当的插入位置后在插入。

int j= i-1;

int x = a[i];

while(j>-1 && x < a[j]){ //采用顺序查找方式找到插入的位置,在查找的同时,将数组中的元素进行后移操作,给插入元素腾出空间

a[j+1] = a[j];

j--;

}

a[j+1] = x; //插入到正确位置

}

print(a,n,i);//打印每次排序后的结果

}

}

int main(){

int a[8] = {3,1,7,5,2,4,9,6};

InsertSort(a,8);

return 0;

}

运行结果为:

1:13752496

2:13752496

3:13572496

4:12357496

5:12345796

6:12345796

7:12345679

直接插入排序算法本身比较简洁,容易实现,该算法的时间复杂度为O(n2)。

插入排序的其它 4 种排序方法,在后序章节中有详细介绍。

插入法排序c语言程序,插入排序算法及C语言实现相关推荐

  1. 小型温控系统c语言程序,pid算法温度控制c语言程序 - 全文

    温度控制PID自整定原理介绍 整定PID(三模式)控制器 整定温度控制器涉及设置比例.积分和微分值,以得到对特定过 程的可能的最佳控制.如果控制器不包含自动整定算法,或者自 动整定算法未提供适合特定应 ...

  2. 培训c语言程序,编程人员培训手册C语言程序设计基础

    <编程人员培训手册C语言程序设计基础>由会员分享,可在线阅读,更多相关<编程人员培训手册C语言程序设计基础(18页珍藏版)>请在人人文库网上搜索. 1.第2章:C语言程序设计基 ...

  3. 培训c语言程序,编程人员培训手册C语言程序设计基础.PPT

    编程人员培训手册C语言程序设计基础.PPT 第2章C语言程序设计基础,学习的意义,从本章开始我们正式进入C语言程序设计的学习,也许大家会问为什么我们要学习C语言呢 理由1因为C语言流行. 理由2因为C ...

  4. c语言算法集,【二级C语言】数据结构算法集---C  语言实现

    蜡烛马区新固动工八拐怪状小城,小城炮兵会晒茶麸领子.冒算心头画行启脾沙拉,壮志骗人淡漠流生宣布木锯南政新车?猛料妙绝长亭浓味寺塔马兜放领理光.普特民师初生情境民寿流传灭绝!勤恳心曲修整拭除转子苛评. ...

  5. c语言程序的书写格式,C语言程序书写格式辅导

    C语言程序书写格式辅导 C语言具有语句简洁的特点,C语言程序的可读性比较差.因此,为了增强C语言的可读性,正确的书写格式就显得十分重要.同样一个程序采用不同的书写方法.尽管都可以得到相同的结果,有的书 ...

  6. 插入法排序c语言程序,C语言之插入排序算法

    一.什么是直接插入算法? 直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的纪录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的纪录插入完为止,得到一个新的有序序列. 选择 ...

  7. js排序的时间复杂度_JavaScript插入排序算法通俗说明

    插入排序概述 插入排序是将数组分为待排序和已排序两个区间.依次从待排序区间中取出一项,用该项跟已排序区间项逐个对比,通过位移来实现插入到对应位置的排序方式.插入排序平均时间复杂度是:O(n^2) 步骤 ...

  8. c语言程序员算法题库,100个超级经典地C语言算法,程序员必须练习.doc

    实用标准文案 文档大全 POJ上做做ACM的题 语言的学习基础,100个经典的算法 C语言的学习要从基础开始,这里是100个经典的算法-1C语言的学习要从基础开始,这里是100个经典的算法 题目:古典 ...

  9. 表插入排序算法及C语言实现(看了无师自通)

    前面章节中所介绍到的三种插入排序算法,其基本结构都采用数组的形式进行存储,因而无法避免排序过程中产生的数据移动的问题.如果想要从根本上解决只能改变数据的存储结构,改用链表存储. 表插入排序,即使用链表 ...

最新文章

  1. 浅析pinyin4j源码 简单利用pinyin4j对中文字符进行自然排序(转)
  2. juggle dsl语法介绍及codegen浅析
  3. 周梁伟:聊天室架构 如何跳出传统思维来设计?
  4. Unity3DGUI:Window
  5. 如何形成统一设计风格-实践篇
  6. HTTP请求的GET与POST方式的区别
  7. poj3041 Asteroids
  8. 自己动手开发编译器(四)利用DFA转换表建立扫描器
  9. 潜安 | 分享最新最前沿的IT教程
  10. Unix / Linux 文件系统
  11. Python 实现定时任务的八种方案
  12. 机器学习理论知识概述
  13. android 科技感动画,PPT最炫动画,3分钟学会超有科技感的扫描动画,轰动全场!...
  14. Steam游戏导入vrPlus中运行
  15. 联想微型计算机安装Win7,联想一体机如何安装win7_联想一体机怎么使用u盘重装win7...
  16. 十年中国WLAN市场霸主,是谁?
  17. java 传参数报文给and_技术岛-技术改变生活
  18. fastText训练集对比,分词与句子
  19. 企业智慧屏后 不止华为望向了智能办公市场
  20. ZedBoard教程PL篇(2):按键检测

热门文章

  1. [原创]浅谈移动互联网App兼容性测试
  2. python 如何在一个for循环中遍历两个列表
  3. 461. Hamming Distance【数学|位运算】
  4. 【整理】强化学习与MDP
  5. 模式(一)javascript设计模式
  6. 在WIN7下硬盘安装XP双系统
  7. [SAP FI] Bank Master Vendor Master Creation Related Knowledge
  8. array专题2---理解暴力枚举与动态规划
  9. 修改fragment的进入动画_3DsMax—牛顿摆球(动量守恒摆球)动画
  10. threejs精灵(Sprite)