直接插入排序:

算法思想:假设待排序的记录存放在数组R[1……n]中,初始时,i=1,R[1]自成一个有序区,无序区为R[2……n].然后从i=2起直到i=n,依次将R[i]插入当前的有序区R[1...n-1]中,最后,生成含n个的记录的有序区。

算法实现:

void insertsort(Reqlist R)

{

  int i,j;

  for(i=2;i<=n;i++)//从第二个数字开始插入排序

  {

    R[0]=R[i];//R[0]作为哨兵,一方面暂存数据,另一方面,检测下标j是否越界(2)

    j=i-1;

    while(R[0].key<R[j].key)//(2)

    {

      R[j+1]=R[j];

      j--;

    }

    R[j+1]=R[0];

  }

}

算法复杂度计算:

  当待排序的n个数据为正序时候,算法复杂度为O(n);

  当待排序的n个数据为反序时候,算法复杂度为O(n^2);

  当待排序的n个数据为乱序时候,算法复杂度为O(n^2);

希尔排序:

希尔排序是插入排序的一种,也称为“缩小增量排序”

 基本思想:是把待排序的记录一组记录按照增量分成若干个小组(以n个数据为例,分成了若干次的n/2个小组(小组内都有俩个记录),但是每次组内的两个数据之间的间距不一样,即增量d不同),分别进行组内直接插入排序,待整个序列中的记录“基本有序时候”,再对全体记录进行依次直接插入排序,这样大大减少了记录的移动次数,提高了算法的排序效率。

算法的实现如下://与直接插入排序基本一样,只不过是把数据之间的比较间距由原来的1拉大到d

  void shellsort(Sqlist R,int n)//n为待排序的记录的个数

  {

    int i,j;

    d=n/2;

    while(d>0)

    {

      for(i=d+1;i<=n;i++)//从第d+1个数据开始,与相应的前面的第(i-d)个数据进行比较,采用插入思想进行排序

      {

        R[0]=R[i];//R[0]作为暂存单元

        j=i-d;

        while(j>0&&(R[0].key<R[j].key))//若干次的小组插入排序

        {

           R[j+d]=R[j];

           j=j-d;

        }

        R[j+d]=R[0];

      }

      d=d/2;

    }

  }

算法的复杂度为O(n^2);希尔排序不稳定

C语言中的插入排序(2016-12-30)的更多相关文章

  1. C语言中的位操作(12)--判断一个数字是否包含一个全零字节

    本文主要介绍一系列算法,算法主要功能是判断一个数字(二进制)中是否包含全零字节 e.g.1010 1111 0000 0000 1001 1111 0001 1111 即 32位整数:A4A3A2A1 ...

  2. 1306. Sorting Algorithm 2016 12 30

    1306. Sorting Algorithm Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description One of the f ...

  3. U3D笔记11:47 2016/11/30-15:15 2016/12/19

    11:47 2016/11/30Before you can load a level you have to add it to the list of levels used in the gam ...

  4. My latest news(--2016.12.31)

    2016.12.31  前一天晚上看 “纪实新闻” ,白天看视频,晚上刷题,看电影<湄公河行动> 2016.12.30 18:36 昨天上午考完了本学期的最后一门课程,下午乒乓+值班,今天 ...

  5. Oracle中把一个DateTime的字符串转化成date类型。to_date('2016/12/8 18:55:43','yyyy/MM/dd hh24:mi:ss'),

    Oracle中把一个DateTime或者该形态字符串转化成date类型. to_date('2016/12/8 18:55:43','yyyy/MM/dd hh24:mi:ss'), 或者: sele ...

  6. js 中日期2013-08-30或2019-08-24 12:30:00 转换成时间戳,和2019-08-29T02:15:08.000+0000转化为2019-08-29T02:15:08

    js 中日期2019-08-24 或2019-08-24 12:30:00 转换成时间戳 首先将它转成date日期类型,然后获取毫秒形式时间戳 let date=new Date("2019 ...

  7. Understand:高效代码静态分析神器详解(一) | 墨香博客 http://www.codemx.cn/2016/04/30/Understand01/

    Understand:高效代码静态分析神器详解(一) | 墨香博客 http://www.codemx.cn/2016/04/30/Understand01/ ===== 之前用Windows系统,一 ...

  8. mysql查询练习题-2016.12.16

    >>>>>>>>>> 练习时间:2016.12.16 编辑时间:2016-12-20-->22:12:08 题: 涉及:多表查询.ex ...

  9. c语言中(*p)[n]和*p[n]的区别

    写于2016年12月5日. c语言中(*p)[n]表示的数组指针,在该表达式中按照运算的优先级,首先计算()的中*p,在和[n]计算.含义为指向含有n个元素的一维数组. *p[n]表示的是指针数组,在 ...

随机推荐

  1. mongodb 启动脚本和配置

    http://justcoding.iteye.com/blog/2270466 http://blog.csdn.net/neutrojan/article/details/32328531

  2. node.js express架构安装部署

    安装-g:表示全局安装(必须以安装node.js) npm install -g express-generator 创建一个express架构的项目文件夹express testWebApp 在pa ...

  3. MachineKey 操作 之 获取 MachineKey

    MachineKey获取介绍 对MachineKey进行配置,以便将其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密和解密,并将其用于对进程外会话状态标识进行验证.本次讲的是如 ...

  4. Mvc 之System.Web.Optimization 压缩合并如何让*.min.js 脚本不再压缩

    最近项目中用到了easy ui ,但是在配置BundleConfig 的时候出现了问题,easy ui的脚本jquery.easyui.min.js 压缩后出现各种脚本错误,总是莫名其妙的 i标量错误 ...

  5. Java 之 常用类(一)

    1.字符串: a.分类:String.StringBuffer.StringBuilder b.特殊:①String是唯一一个可以直接用常量赋值的引用数据类型 ②String的常量也是一个对象 (即 ...

  6. EditText获取和失去焦点,软键盘的关闭,和软键盘的显示和隐藏的监听

    软键盘显示和隐藏的监听: 注: mReplayRelativeLayout是EditText的父布局 //监听软键盘是否显示或隐藏 mReplayRelativeLayout.getViewTreeO ...

  7. spring-aop学习【基于注解】

    我个人觉得,这个好像就是用在定制日志输出上,和log4j很像. 用途: 如果业务方法调用每一步都需要详细的日志,那就用这个吧 好处就是: 方便维护,只包含业务代码 下面开始说明: 所需要的jar包: ...

  8. win下安装jdk7后,修改环境变量无法改为jdk6的问题

    jdk的安装包,现在的策略改变了,不再帮你设置环境变量,而是直接把java.exe,javaw.exe,javaws.exe直接拷贝到了system32下. 删掉这3个,path就生效了!

  9. iOS 时间的处理

    做App避免不了要和时间打交道,关于时间的处理,里面有不少门道,远不是一行API调用,获取当前系统时间这么简单.我们需要了解与时间相关的各种API之间的差别,再因场景而异去设计相应的机制. 时间的形式 ...

  10. C# Current thread must be set to single thread apartment (STA) mode before OLE calls can be made

    将箭头指向部分替换为编译器报错的内容即可. 参考文章:https://www.experts-exchange.com/questions/28238490/C-help-needed-Current ...