经典排序算法----直接插入排序算法及其改进(稳定)

定义:

直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录数加一的有序表。

实现思想

我们预留了一个哨兵,这里我们将用到它来保存一个临时值

插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。

所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的。

基本思想

每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。

代码实现

void InsertSort(SqList *L)
{int i, j, count1, count2;count2 = count1 = 0;for (i = 2; i <= L->length;i++){if (L->r[i]<L->r[i-1])    //若是前面第一个都不满足顺序,那么我们就要去循环
        {L->r[0] = L->r[i];for (j = i - 1; L->r[j]>L->r[0]; j--)    //将大的数据全部向后移动,从后向前防止数据覆盖
            {count1++;L->r[j + 1] = L->r[j];    //记录后移
            }L->r[j + 1] = L->r[0];    //插入到正确位置count2++;}}printf("loop move count:%d,  swap insert count:%d\n", count1, count2);
}

性能分析

空间上只需要一个记录辅助空间,所以关键看时间复杂度
平均比较和移动次数约为(n^2)/4,所以时间复杂度为O(n^2)。
其性能要比冒泡和简单选择排序好些

转载于:https://www.cnblogs.com/ssyfj/p/9510735.html

数据结构(七)排序---直接插入排序(稳定)相关推荐

  1. ****** 四 ******、软设笔记【数据结构】-排序、插入排序、选择排序

    一.排序     将一组杂乱无章的数据按一定的规律次序排列起来.     排序的目的是什么?         *便于查找!     排序算法的好坏如何衡量?         *时间效率--排序速度(即 ...

  2. 【Java数据结构与算法】第七章 冒泡排序、选择排序、插入排序和希尔排序

    第七章 冒泡排序.选择排序.插入排序和希尔排序 文章目录 第七章 冒泡排序.选择排序.插入排序和希尔排序 一.冒泡排序 1.基本介绍 2.代码实现 二.选择排序 1.基本介绍 2.代码实现 三.插入排 ...

  3. 数据结构 实验七 排序技术的编程实现

    实验七  排序技术的编程实现 [实验目的] 排序技术的编程实现 要求: 排序技术的编程实现(2学时,综合型),掌握排序技术的编程实现,可以实现一种,也可以实现多种.也鼓励学生利用基本操作进行一些应用的 ...

  4. java数据结构排序实验报告_java数据结构与算法之插入排序详解

    本文实例讲述了java数据结构与算法之插入排序.分享给大家供大家参考,具体如下: 复习之余,就将数据结构中关于排序的这块知识点整理了一下,写下来是想与更多的人分享,最关键的是做一备份,为方便以后查阅. ...

  5. 算法与数据结构(冒泡排序,选择排序和插入排序的总结)

    冒泡排序,选择排序和插入排序的总结 在规模较小时,或者元素的有序性较高时,插入排序的时间复杂度可以接近 O(n) ,是上述三种排序里表现最好的 一.通过表格我们可以发现,冒泡排序的时间复杂度是要优于选 ...

  6. 【数据结构----笔记5】插入排序算法之【希尔排序算法】

    /*__________________________________________________________________________________________________ ...

  7. 程序员内功修炼之学好算法和数据结构(一)排序基础、选择排序、插入排序、希尔排序...

    一.排序基础(重要) 1.1 为什么要学习O(n^2)的排序算法? 编码简单,易于实现,是一些简单情景的首选. 在一些特殊情况下,简单的排序算法更有效. 简单的排序算法思想衍生出复杂的排序算法,在这个 ...

  8. 数据结构与算法 | 直接插入排序、希尔排序

    前几章讲了选择排序中的直直接选择排序.双向选择排序.堆排序,这次来讲讲利用'插入'为核心来实现的插入排序算法. 插入排序 把待排序的记录按其关键码值的大小逐个插入到一 个已经排好序的有序序列中,直到所 ...

  9. 【数据结构】排序算法总结

    在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的:若具有相同关键字的记录之间的相对次序发生改变,则称这种排序方法是不稳定的.即 ...

  10. 算法与数据结构(排序算法概述)

    排序算法 Sort Algorithm 排序算法是将一系列数据根据指定的顺序进行排列的过程 排序算法的分类: 内部排序:指将需要处理的所有数据都加载到内存中进行排序 插入排序 直接插入排序 希尔排序 ...

最新文章

  1. html需要顺序阅读吗,前端知识:HTML5所有的标签-按顺序排列 | 前端面试题
  2. macOS下使用anaconda相关系列
  3. 搞懂正则表达式之基础篇
  4. cpanel重启PHP服务_8款基于Web控制面板的服务器管理工具,开源免费,系统管理员利器...
  5. Extjs中给同一个GridPanel中的事件添加参数的方法
  6. 项目管理学习总结(7)——阿里云架构师:技术高手转向管理体会
  7. python3librequest_python3.x學習之urilib.request簡單學習
  8. java.io.NotSerializableException: java.util.ArrayList$SubList
  9. 科学表明世界上最令人感觉舒服的10种颜色(色码及RGB)
  10. 三四线城市咖啡店的光荣与梦想
  11. Vue项目中引用‘阿里巴巴字体图标库iconfont’
  12. 8核、6核、4核、双核CPU是什么意思
  13. 如何将英文句子分词(拆分单词), 并判断分词是否为英文单词
  14. 指纹识别 matlab
  15. SAP MM之移动类型(Movement type-MVT)_小七_新浪博客
  16. linux下delete释放不了内存,c++delete后虚拟内存不降的原因(疑似内存泄漏)
  17. 别在那抱怨高考怎么不考DOTA呢!!高考就是考DOTA你也不行!
  18. 20分钟掌握前端编写 CLI 工具
  19. 【译】volatile C语言关键字,如何使用?
  20. 东财《计算机应用基础》综合作业

热门文章

  1. Linux内核设计与实现 总结笔记(第五章)系统调用
  2. python 学习DAY11
  3. 【Android Developers Training】 81. 解析XML数据
  4. VS2008调试总结
  5. DevExpress控件之GridControl控件
  6. .pro.user文件
  7. parted工具详解
  8. haproxy配置代理tomcat和nginx_你真的掌握LVS、Nginx及HAProxy工作原理吗?
  9. 运行错误5无效的过程调用或参数_FANUC系统常用参数汇总
  10. matlab按某一列排序