C语言学习之插入排序
此前的一些博文分别写了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语言学习之插入排序的更多相关文章
- C语言学习 第八次作业总结
本次作业其实没有新的内容,主要就是复习上一次的一维数组的相关内容.冯老师布置了5道题目,其中涉及到一些比较简单的排序或者是查找的方法.因为数据很少,所以直接使用for循环遍历就可以了. 关于本次作业, ...
- C语言学习 第七次作业总结
C语言学习 第七次作业总结 数组可以分为数组和多下标数组(在传统的国内C语言书本中,将其称为二/多维数组). 数组名称 在之前的课程中,大家应该都有印象,对于int a这样的定义,会为变量 a 声明一 ...
- 技能收获与C语言学习
你有什么技能比大多人(超过90%以上)更好? 我会的东西很多,喜欢的东西太多,但是很遗憾广而不专,会而不精.学了很多东西我都是为了娱乐,因为以前我们那里过于强调学习,很多爱好也都被扼杀在摇篮里.我觉得 ...
- 一份关于Swift语言学习资源的整理文件
一份关于Swift语言学习资源的整理文件 周银辉 在这里下载 https://github.com/ipader/SwiftGuide
- go语言学习笔记
Go语言学习基本类型Bool 取值范围:true,false (不可以用数字代替)Int/uint 根据平台可能为32或64位int8/uint8 长度:1字节 取值范围-128~127/0~255b ...
- 20155206赵飞技能获取经验,C语言学习感想与对JAVA的学习目标
自己较强的技能获取经验. 1:实话实说我自己是没有哪个技能可以超过90%的人的,只有自认为做的还可以的一些事情,例如打篮球,office软件的应用,一百米跑.至于其他方面就是很平庸了. 2:经验主要有 ...
- HTML语言学习笔记(会更新)
# HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...
- 20155229-付钰涵-分析自我技能延展到c语言学习状况
我的小技能 我记得幼儿园时表演的舞蹈,也记得从水彩到素描的学习,还记得小学和初中获得的钢琴省级奖项. 舞蹈止于一年级,绘画止于三年级,钢琴从学前班到高一那十年的时间里有过断续. 03年-04年的那个冬 ...
- linux 下C语言学习路线
UNIX/Linux下C语言的学习路线.一.工具篇“公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工 ...
随机推荐
- 实现鼠标hover动画效果自己理解的两种方法——练习笔记
练习前端技术学院的任务,需要实现"导航栏中的链接,随着鼠标悬浮的位置,相应的链接下出现红色线段"的效果(如图1),我的理解有简易与稍显复杂一些的方法: 首先想到的就是直接利用伪元素 ...
- 信号处理引发的cpu高
背景知识: 1.tty 终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备. tty指的是七个alt+crtl+F1~F7.tty1-tty6表示文字界面,可以用Ctrl+Al ...
- enum 操作
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- Spring怎么引入多个xml配置文件
方式一:在web.xml中通过<context-param> 标签引入 <context-param> <param-name>contextConfigLocat ...
- js_8_dom标签
创:9_3_2017 星期4 修: 对于在a标签中,如何阻止跳转? 定义一个事件,事件顺序执行后才执行跳转,如果事件函数返回false,则后面事件就不触发 事件1 = "return 函数 ...
- 在Tomcat中采用基于表单的安全验证
.概述 (1)基于表单的验证 基于From的安全认证可以通过TomcatServer对Form表单中所提供的数据进行验证,基于表单的验证使系统开发者可以自定义用户的登陆页面和报错页面.这种验证方法 ...
- MySQL存储过程中declare和set定义变量的区别
在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅 ...
- 从LINQ开始之LINQ to Objects(上)
LINQ概述 LINQ,语言集成查询(Language Integrated Query),它允许使用C#或VB代码以查询数据库相同的方式来操作不同的数据源. LINQ体系结构 从上图可以看出,LIN ...
- $.ajax()实现简单计算器
1.html页面 a.html <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- notepad++代码输出电话号
在网上看到一个程序员找合租的消息,希望找一个程序员合租,所以电话号码以代码的形式输出,闲来没事打出来玩玩.首先新建一个test.java文件,并敲入下面代码: 1 public class test{ ...