此前的一些博文分别写了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. C# 获取ListView中选中行中对应的列数据

    C# 获取ListView中选中行中对应的列数据 ) { ListView.SelectedIndexCollection c = MediaList.SelectedIndices; ]].SubI ...

  2. 异步式I/O与实践式编程

    阻塞 线程在执行中如果遇到磁盘读写或网络通信(统称为I/O操作)通常要消耗很长时间 这时操作系统会剥夺这个线程的CPU控制权,使其暂停执行,同时将资源让给其他工作线程 异步I/O 非阻塞IO 针对所有 ...

  3. Django_form验证

    需求: 当用户向Django后端以post提交数据的时候,无论前端是否进行数据合法验证,后端都需要对客户端提交过来的数据进行数据合法性验证,是否可以利用models中表类字段的约束来实现验证,并且可以 ...

  4. Spark 读写hive 表

    spark 读写hive表主要是通过sparkssSession 读表的时候,很简单,直接像写sql一样sparkSession.sql("select * from xx") 就 ...

  5. viewpager 设置预加载项

    live_pager.setOffscreenPageLimit(3); 防止viewpager 左右滑动 fragment消失

  6. Struts2中拦截器的使用与配置

    一,拦截器是什么? 拦截器是在Action执行之前和之后执行的代码,是一个类似于过滤器的类: 二,拦截器的作用 拦截器拦截Action的请求,在Action之前或之后实现某项功能: 三,拦截器的特点 ...

  7. 服务器开发之CGI后门

    1.html代码 <form id = "form" name="form" method="post" action=". ...

  8. Django----模板层

    一.模板层:           python的模板:HTML代码+模板语法      模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签. import datetime t=dateti ...

  9. 不使用Math.random实现随机数

    不使用Math.random实现随机数 var rand = (function(){ var today = new Date(); var seed = today.getTime(); func ...

  10. Tomcat学习

    一:项目默认部署路径: eclipse中,默认new一个server,项目默认会部署在:workspace\(工作空间)\.metadata\.plugins\org.eclipse.wst.serv ...