总体思路是:先记录每一次要插入的值,插入的值依次与前面插入的值比较大小,直到找到那个值,然后后面的值全部后移空出的位置,就是他的正确位置。循环n次实现排序。


#include<stdio.h>
void insertvalue(int a[],int n);
void main()
{int a[5]= {5,9,47,3,4};printf("排序之前:\n");for(int i=0; i<5; i++){printf("%d\t",a[i]);}insertvalue(a,5);printf("\n");printf("排序之后:\n");for(int i=0; i<5; i++){printf("%d\t",a[i]);}}
void insertvalue(int a[],int n)
{int key;for(int i=1; i<n; i++){key=a[i];int j=i-1;while(a[j]>key&&j>=0) //寻找插入位置{a[j+1]=a[j];j--;//与前面的数比较         }a[j+1]=key;//最终位置}}

最好情况下,正序,总的比较次数为n-1次,记录移动的次数2(n-1),时间复杂度为O(n)。
最坏情况下,逆序,总的比较次数为(n+2)*(n-1)/2,移动(n+4)(n-1)/2次,时间复杂度O(n^2)。
平均情况下,各种概率相同,总的比较次数为(n+2)*(n-1)/4,移动(n+4)(n-1)/4次,时间复杂度O(n^2)。
当记录基本有序或者待排序记录中较少时,它是最佳排序方法。

插入排序算法(C实现)相关推荐

  1. 十五、插入排序算法(两种方式)

    一.插入排序法思想 插入排序(Insertion Sorting)的基本思想是:把 n 个待排序的元素看成为一个有序表和一个无序表,开始时有 序表中只包含一个元素,无序表中包含有 n-1 个元素,排序 ...

  2. 插入排序算法(基于Java实现)

    title: 插入排序算法(基于Java实现) tags: 插入算法 插入排序算法原理及代码实现: 一.插入排序算法的原理 首先,我们将数组中的数据分为两个区间,已排序区间和未排序区间.初始已排序区间 ...

  3. c#冒泡、快速、选择和插入排序算法的项目应用

    在之前的一篇文章里,我们简单地实现了对一维数组的四种排序算法,但是在实际的项目中,我们排序的方式可能(几乎是一定)不止仅仅按照数字排序.我们常常按照合适的需要的排序方式进行排序,比如航班信息可能按时间 ...

  4. 上标3下标6算法_插入排序算法导学案

    本文为"选考VB算法专题系列讲座9插入排序算法"视频配套的导学案,请同学们先完成导学案再收看视频.明天将推送"选考VB算法专题系列讲座9插入排序算法"视频,敬请 ...

  5. java实现插入排序算法 附单元测试源码

    插入排序算法 public class InsertSortTest {/*** @param args*/public static void main(String[] args) {int[] ...

  6. 插入排序算法 及其二分搜索优化版 C++代码实现 恋上数据结构笔记

    复习梗概 文章目录 复习梗概 插入排序算法思想 插入排序时间复杂度与特性(多少,与什么有关?) 插入排序基础版 插入排序2nd优化版(优化了哪里?) !!!插入排序二分搜索优化版(优化了哪里?如何优化 ...

  7. 排序算法 | 直接插入排序算法的图解、实现、复杂度和稳定性分析

    排序算法 | 直接插入排序算法的图解.实现.复杂度和稳定性分析 目录 1.直接插入排序定义 2.直接插入排序,步骤说明 3.动态图演示 4.代码实现,运行结果 5.算法分析 ① 时间复杂度分析 ② 空 ...

  8. 动图图解C语言插入排序算法,含代码分析

    C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...

  9. JavaScript实现InsertionSort插入排序算法(附完整源码)

    JavaScript实现InsertionSort插入排序算法(附完整源码) Comparator.js完整源代码 Sort.js完整源代码 InsertionSort.js完整源代码 Compara ...

  10. python算法与数据结构-插入排序算法(34)

    阅读目录 一.插入排序的介绍 二.插入排序的原理 三.插入排序的图解 四.插入排序的python代码实现 五.插入排序的C语言代码实现 六.插入排序的时间复杂度 七.插入排序的稳定性 一.插入排序的介 ...

最新文章

  1. 万字长文带你入门 GCN
  2. 无法链接到SQL Server远程服务器的解决
  3. UOJ37. 【清华集训2014】主旋律
  4. Android Cursor自动更新的实现和原理
  5. oracle 11g 大量废连接占满数据库连接问题处理
  6. hadoop2.20+hive+sqoop+mysql数据处理案例
  7. OpenGL中的上下文 理解整理
  8. Java-Socket实现文件的断点续传
  9. 【书摘】一种基于Git的版本管理方案
  10. 清华计算机系山东分数,清华大学山东录取分数线|2021清华大学山东分数线|2021年清华大学山东高考分数线|2021年清华大学山东招生计划录取人数...
  11. Json文件转Map(三)之获取嵌套Map值
  12. 手动创建maven项目+cmd+webapp+tomcat
  13. Qt学习之C++基础
  14. CSS3的box-sizing 属性
  15. C语言/C++项目——黄金矿工
  16. 秦储承办 | 西部数博会暨第三届西安区块链产业发展论坛成功召开!
  17. 错误:.TemplateProcessingException: Exception evaluating SpringEL expression:
  18. 香橙派PC Plus电脑开发板制作网络打印服务器
  19. python3大神器_Python三大神器之pip的安装
  20. putty下载linux文件到本地windows

热门文章

  1. LVM逻辑卷管理基本概念及原理
  2. unset MAILCHECK
  3. HTML5 Canvas平移,放缩,旋转演示
  4. JavaScript函数重载模拟
  5. Vue项目部署遇到的问题及解决方案
  6. SecureCRT安装
  7. 压力测试以及编译安装httpd2.4
  8. 有关 input默认宽度
  9. 神级代码编辑软件(Sublime Text 3) v3.3114 汉化特别版
  10. 用babel cli编译用ES6写的JSX