插入排序——C语言
插入排序
插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
(每步将一个待排序的元素,按其排序码大小插入到前面已经排好序的一组元素的适当位置上去,直到元素全部插入为止)
(图片来源:https://www.cnblogs.com/fivestudy/p/10212306.html)
具体算法描述如下:
1、将待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列;
2、取出下一个元素,在已经排序的元素序列中从后向前扫描;
3、如果该元素(已排序)大于新元素,将该元素移到下一位置;
4、重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
5、将新元素插入到该位置后;
6、重复步骤2~5。
排序过程示例如下图:
(图片来源:https://www.cnblogs.com/chengxiao/p/6103002.html)
代码实现:
/* 插入排序*/
int num[] = {, , , , };
int pos, cur;
int i;
int length = sizeof(num)/sizeof(num[]); for (i = ; i < length; i++)
{
pos = i - ; //有序序列的最后一个元素位置
cur = num[i]; //保存待排序元素的值
while ( pos >= && num[pos] > cur)
{
num[pos + ] = num[pos];
pos--;
}
num[pos + ] = cur; //将待排序元素插入数组中
}
也可以写成两个for循环的形式,效果相同
/* 插入排序*/
int num[] = {, , , , };
int cur;
int i, j;
int length = sizeof(num)/sizeof(num[]); for (i = ; i < length; i++)
{
cur = num[i]; //待排序元素
for (j = i - ; j >= && num[j] > cur; j--)
{
num[j + ] = num[j];
}
num[j + ] = cur;
}
排序过程:以上面的例子来说排序的对象是 3,7,1,8,5 数组长度为5,因为第一个元素可以认为已经被排序,所以for循环的次数是:5(数组长度) - 1 = 4
第一次for循环:
3>7不成立,插入待排序元素,数组不变,此时有序序列为3,7
第二次for循环:
7>1成立,数组变成3,7,7,8,5
3>1成立,数组变成3,3,7,8,5
插入待排序元素,此时数组为1,3,7,8,5,有序序列为1,3,7
第三次for循环:
7>8不成立,插入待排序元素,数组不变,此时有序序列为1,3,7,8
第四次for循环:
8>5成立,数组变成1,3,7,8,8
7>5成立,数组变成1,3,7,7,8
3>5不成立,插入待排序元素,此时数组为1,3,5,7,8,有序序列为1,3,5,7,8,排序完成
插入排序——C语言的更多相关文章
- 插入排序_C语言_数组
插入排序_C语言_数组 #include <stdio.h> void insertSort(int *); int main(int argc, const char * argv[]) ...
- 插入排序C语言版本
算法思路: 每趟将一个待排序的元素作为关键字,按照其关键字值的大小插入到已经排好的部分的适当位置上,直到插入完成. 数组中待排序的关键字前面的数据为已经排序的数据,关键字插 ...
- 希尔排序——C语言
希尔排序 希尔排序是插入排序的一种,又称“缩小增量排序”,希尔排序是直接插入排序算法的一种更高效的改进版本,关于插入排序可以看下这篇随笔:插入排序——C语言 (图片来源:https://www.cnb ...
- 2-路插入排序(2-way Insertion Sort)的C语言实现
原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia 2-路插入排序(2-way Insertion Sort)的基本思想: 比fis ...
- 折半插入排序(Binary Insertion Sort)的C语言实现
原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia 折半插入排序(Binary Insertion Sort)的基本思想是将新记录插入到已经 ...
- 直接插入排序(Straight Insertion Sort)的C语言实现
原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia 直接插入排序(Straight Insertion Sort)的基本思想是将新记录插入到 ...
- 数据结构C语言版 表插入排序 静态表
数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P270 编译 ...
- 深入浅出数据结构C语言版(16)——插入排序
从这一篇博文开始,我们将开始讨论排序算法.所谓排序算法,就是将给定数据根据关键字进行排序,最终实现数据依照关键字从小到大或从大到小的顺序存储.而这篇博文,就是要介绍一种简单的排序算法--插入排序(In ...
- C语言学习之插入排序
此前的一些博文分别写了C语言中经典的排序方式,选择排序 冒泡排序 桶排序,此文就写 插入排序吧. 相对于冒泡排序,插入排序就比较方便快捷了.和冒泡 选择排序一样,插入排序也需要比较大小.可以这样理解插 ...
随机推荐
- zabbix (6) 为主机添加监控项,触发器,动作
先了解一下zabbix的相关概念 监控项(iterms):一个具体的指标,比如某个人的体重. 键(key):通过定义(自定义或者zabbix自带)的key获取相应指标的具体值,比如这个人的体重50斤 ...
- webpack4.0源码分析之Tapable
1 Tapable简介 webpack本质上是一种事件流的机制,它的工作流程就是将各个插件串联起来,而实现这一切的核心就是Tapable,webpack中最核心的负责编译的Compiler和负责创建b ...
- Go by Example-变量
在上一节中提到了值类型,但是他们都是写在输出语句里的,如果后面程序需要用的话就显得非常的不方便,所以更好的办法就是把它们定义成变量,然后在调用. 变量 和Python不同的是,Go语言中的变量是需要的 ...
- js的一些笔试面试题
1. 判断字符串是否是这样组成的,第一个必须是字母,后面可以是字母.数字.下划线,总长度为5-20 var reg = /^[a-zA-Z][a-zA-Z_0-9]{4,19}$/; reg.test ...
- Go --- 七牛云 上传文件 & Token demo
package main import ( "bytes" "crypto/hmac" "crypto/sha1" "encodi ...
- Flutter移动电商实战 --(43)详细页_补充首页跳转到详细页
首页轮播点击到详细页 修改我们轮播这里的代码:SwiperDiy这个类这里的代码 return InkWell( onTap: (){ Application.router.navigateTo(co ...
- AT1357 n^p mod m(洛谷)
题意翻译 求 n^p mod m 的值 输入格式 一行,为整数 n,m,p(注意顺序) 输出格式 一行,为 n^p mod m 的值 数据说明 对于100%的数据 1≤n,m≤10^91≤n,m≤10 ...
- sppNet论文学习
Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 深度神经网络中用于视觉识别的空间金字塔池化 ...
- DTC & MSDTC (待研究)
相关学习文档: Database Systems: The Complete Book
- 123457123457---com.threeapp.ShuiShiYanLiWang01----谁是眼力王
com.threeapp.ShuiShiYanLiWang01----谁是眼力王