此前的一些博文分别写了C语言中经典的排序方式,选择排序 冒泡排序 桶排序,此文就写 插入排序吧。

  相对于冒泡排序,插入排序就比较方便快捷了。和冒泡 选择排序一样,插入排序也需要比较大小。可以这样理解插入排序,是由一个有序的数组中元素与给出的无序数组元素进行逐一的比较,无序就是我们要进行排序的数组,当所有我们进行排序中的元素都比较完后,祖师有序的数组就是我们要的排序结果。

  进一步说,好比有两个相同空间的数组 一个数组就是我们要进行排序的无序数组 另一个就是我们排序好的有序数组 。初始时,这个有序数组是空的,此中的元素就是从无序数组取来。从无序数组中依次取出一个元素来与有序数组中的元素依次比较,当然初始时这个有序数组中是空的(这么理解吧,),就不需要进行了直接放进这个有序的数组中。放入第一个元素后,下一个从无序数组中取出的第二个元素就与这个有序数组中的这一个元素进行比较,如果该无序数组中元素数值比有序数组中元素大,那么此无序数组中的元素就放置在有序数组中这第一个元素的后边,反之则这个位于第一位上的第一个元素就往后移动腾出位置放置比它小的无序数组中的元素。以后从无序数组中依次取出的元素与有序数组中的元素依次进行比较,满足条件就放置数组相应的位置,其它元素也根据情况进行位置移动。这样进行下去,当无序数组中所有的元素都与有序数组元素比较并放置于相应的位置,那么这个有序数组就是我们需要的结果。

  本文也是参考此篇博文 http://blog.csdn.net/llzk_/article/details/51628574 此文中有图片可供理解。

  此插入排序的C语言代码给出如下(以输入10个元素为例):

#include<stdio.h>
int main(void)
{
int i, j, temp;
int num[];
for (i = ; i < ; i++)
scanf("%d", &num[i]);
for (i = ; i < ; i++)
{
temp = num[i];// 从无序数组中依次取出一个元素
    j = i - ; // i-1 即为有序数组最后一个元素(与无序元素相邻)的下标
   while (j >= && temp < num[j]) //j >= 0 对其进行边界限制。temp < num[i] 为插入判断条件
   {
num[j + ] = num[j];//若不是合适位置,有序数组元素向后移动
    j--;
   }
num[j + ] = temp;//找到满足条件的位置,则将此元素插入对应位置
}
for (i = ; i < ; i++)
{
printf("%d ", num[i]);
}
}

C语言学习之插入排序的更多相关文章

  1. C语言学习 第八次作业总结

    本次作业其实没有新的内容,主要就是复习上一次的一维数组的相关内容.冯老师布置了5道题目,其中涉及到一些比较简单的排序或者是查找的方法.因为数据很少,所以直接使用for循环遍历就可以了. 关于本次作业, ...

  2. C语言学习 第七次作业总结

    C语言学习 第七次作业总结 数组可以分为数组和多下标数组(在传统的国内C语言书本中,将其称为二/多维数组). 数组名称 在之前的课程中,大家应该都有印象,对于int a这样的定义,会为变量 a 声明一 ...

  3. 技能收获与C语言学习

    你有什么技能比大多人(超过90%以上)更好? 我会的东西很多,喜欢的东西太多,但是很遗憾广而不专,会而不精.学了很多东西我都是为了娱乐,因为以前我们那里过于强调学习,很多爱好也都被扼杀在摇篮里.我觉得 ...

  4. 一份关于Swift语言学习资源的整理文件

    一份关于Swift语言学习资源的整理文件     周银辉 在这里下载 https://github.com/ipader/SwiftGuide

  5. go语言学习笔记

    Go语言学习基本类型Bool 取值范围:true,false (不可以用数字代替)Int/uint 根据平台可能为32或64位int8/uint8 长度:1字节 取值范围-128~127/0~255b ...

  6. 20155206赵飞技能获取经验,C语言学习感想与对JAVA的学习目标

    自己较强的技能获取经验. 1:实话实说我自己是没有哪个技能可以超过90%的人的,只有自认为做的还可以的一些事情,例如打篮球,office软件的应用,一百米跑.至于其他方面就是很平庸了. 2:经验主要有 ...

  7. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  8. 20155229-付钰涵-分析自我技能延展到c语言学习状况

    我的小技能 我记得幼儿园时表演的舞蹈,也记得从水彩到素描的学习,还记得小学和初中获得的钢琴省级奖项. 舞蹈止于一年级,绘画止于三年级,钢琴从学前班到高一那十年的时间里有过断续. 03年-04年的那个冬 ...

  9. linux 下C语言学习路线

    UNIX/Linux下C语言的学习路线.一.工具篇“公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工 ...

随机推荐

  1. PostgresSQL中的限制和级联删除

    摘录自:http://www.mamicode.com/info-detail-879792.html 删除和更新时对应的操作是一样的

  2. 多IP服务器应用可以有效的降低成本

    多IP的常规应用很多,SEO,EDM,VPN代理等.可以有效的解决成本,很多时候的租用一台高配置服务器通过XEN,hyper-V等虚拟化技术分割成VPS ,共用一台服务器就会大大的降低成本,这样就需要 ...

  3. 11_什么是sql注入?

    什么是sql注入? --因为后台会把用户输入的插入到后台的sql语句中,来进行sql查询判断用户输入是否存在数据库中,     来验证用户是否合法,就会出现一个问题,用户在做用户验证的时候,在输入框注 ...

  4. junit源码解析总结

    前面的博客我们也已经整理到了,我们使用junit38,在写测试类的时候我们的测试类必须继承TestCase.这个所有测试类的父类在junit.framework包下面. 前面我们的整理都是说直接在ID ...

  5. 计算机改名引发的ORA

    近期上班时,由于开机时老是提示" 局域网出现计算机重名冲突",于是把计算机名字给改了,从PC2010081312zeo改为了CXBIKKKKKKK,结果第二天来的时候,用PL/SQ ...

  6. java从文件中读取json

    wangxiaoer.json里面存放了json数据 需要依赖common-io.jar

  7. auto和bool

    一.auto' 1.只要在函数内部定义变量,默认是auto int num 等价于  auto int num = 10; 2.C语言中的auto关键字就是自动分配自动释放 二.bool类型 1.头文 ...

  8. 关于主机用户名显示为"-bash-4.1$"

    牢记  <1> .(小数点)==> 代表一个任意字符   <2> *(星)====> 重复前面一个字符0到无穷次 1.出现这中情况是因为:用户环境变量的文件没了,通 ...

  9. Array.prototype鲜为人知的事实

    // constructor 属性是每个具有原型的对象的原型成员. // 这包括除 Global 和 Math 对象之外的所有内部 JavaScript 对象. // constructor 属性包含 ...

  10. Java8之Lambda表达式基础

    Java 8中,将会提供对lambda的支持,函数式编程FP(Functional Programming)将会得到很好地支持,而函数式编程的一个重要特点就是适合并行运算. λ:希腊字母表中排序第十一 ...