`

将插入排序的一篇比较不错的文章

 
阅读更多

有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置

包括:直接插入排序,二分插入排序(又称折半插入排序),链表插入排序,希尔排序(又称缩小增量排序)。

基本思想:

n个元素的数列分为已有序和无序两个部分,如



下所示:

  {{a2a3a4…,an}}

  {{a1(1)a2(1)}{a3(1)a4(1) …,an(1)}}

  

  {{a1(n-1)a2(n-1)…}, {an(n-1)}}

  每次处理就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比较,找出插入位置,将该元素插入到有序数列的合适位置中。

算法的复杂度:

如果目标是把n个元素的序列升序排列,那么采用插入排序存在最好情况和最坏情况。最好情况就是,序列已经是升序排列了,在这种情况下,需要进行的比较操作需(n-1)次即可。最坏情况就是,序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次。插入排序的赋值操作是比较操作的次数加上 (n-1)次。平均来说插入排序算法的时间复杂度为O(n^2)。因而,插入排序不适合对于数据量比较大的排序应用。但是,如果需要排序的数据量很小,例如,量级小于千,那么插入排序还是一个不错的选择。

java实现:

Java代码收藏代码
  1. /**
  2. *插入排序,适用于少量数据的排序,时间复杂度O(n2),是稳定的排序算法,原地排序
  3. *
  4. *@parama
  5. */
  6. publicstaticvoidinsertSort(int[]a){
  7. intlength=a.length;
  8. for(inti=1;i<length;i++){
  9. inttemp=a[i];
  10. intj=i;
  11. for(;j>0&&a[j-1]>temp;j--){
  12. a[j]=a[j-1];
  13. }
  14. a[j]=temp;
  15. }
  16. }
分享到:
评论

相关推荐

    java写的基于比较的各种排序算法

    简单排序包括:选择排序,插入排序,折半插入排序,冒泡排序。 分治思想的排序包括:归并排序,快速排序,堆排序。 程序把随机生成的整数进行排序,开始时用1到7选择用哪种排序(没有图形界面,算法为主),堆排序...

    内部排序算法合集(插入、希尔、起泡、快速、选择、堆、归并和基数排序)

    内部排序合集(插入、希尔、起泡、快速、选择、堆、归并和基数排序) 这是我在我们期末的时候写的一些内部排序的例子。... 我最新的动态:最近在研究DirectInput,希望能够在几天后写一篇技术文章,分享一些我的经验。

    C++线性时间的排序算法分析

    折半插入排序,希尔排序)、交换排序(冒泡排序,快速排序)、选择排序(简单选择排序,堆排序)、2-路归并排序(可以参考前一篇文章:各种内部排序算法的实现)等,这些排序算法都有一个共同的特点,就是基于比较。...

    Go语言排序算法之插入排序与生成随机数详解

    从这篇文章开始将带领大家学习Go语言的经典排序算法,比如插入排序、选择排序、冒泡排序、希尔排序、归并排序、堆排序和快排,二分搜索,外部排序和MapReduce等,本文将先详细介绍插入排序,并给大家分享了go语言...

    基于C++实现的各种内部排序算法汇总

    (另:至于堆排序算法,前面已经有一篇文章针对堆排序的算法实现做了详细的描述) C++实现代码如下: /************************************************************************* &gt; File Name: sort.cpp &gt; ...

    python常用排序算法的实现代码

    这篇文章主要介绍了python常用排序算法的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 排序是计算机语言需要实现的基本算法之一,有序的数据结构会...

    链表的19个基本操作

    整合了这篇文章,补全了所有的基本操作(该文中只给出了其中12种,这里提供完整的19种功能)http://www.cnblogs.com/lifuqing/archive/2011/08/20/List.html 快速排序部分参考了 ... 1.初始化线性表,即置单链表的表头...

    c程序设计习题参考(谭浩强三版)习题参考解答

    7.10有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母,小写字母,数字,空格以及其它字符的个数。 41 7.11打印以下图案: 42 7.12有一行电文,已按下面规律译成密码: 43 7.13编一个程序...

    线性表的链式存储

    单链表的创建、插入、排序、删除、输入、输出

    ACT文章管理系统

    8、强大的文章显示功能,文章除了分页、页数统计这些,还拥有上一篇、下一篇提示、点击数、评论留言、查看权限(收费文章)、投稿系统等强大的功能 9、独创的Tags标签,该功能随着系统使用时间的增加,一个真正属于您...

    Excel技术精华文章八篇-共52页

    6、将文件保存为以某一单元格中的值为文件名的宏怎么写 26 7、IE中实现链接EXCEL表 26 8、EXCEL中求两陈列的对应元素乘积之和 27 9、求助日期转换星期的问题 27 10、研究彩票,从统计入手 27 11、如何自动设置页尾...

    C#红黑树算法实现--实现插入,删除,旋转算法

    红黑树的文章看了很多,但个人感觉这一篇: http://zh.wikipedia.org/w/index.php?title=%E7%B4%85%E9%BB%91%E6%A8%B9&variant=zh-cn讲的最清楚,有一种豁然开朗的感觉. 其他的文章在网上也找了一些,可是看到一半就...

    使用python实现希尔、计数、基数基础排序的代码

    希尔排序是一个叫希尔的数学家提出的一种优化版本的插入排序。这篇文章主要介绍了使用python实现希尔、计数、基数基础排序,需要的朋友可以参考下

    WordPress显示相关日志插件

    Match threshold:YARPP会根据分类和标签对每篇文章之间建立一个类似关联度的分数,分数越高的关联就越精确,这项是指只关联大于这个“关联度”的文章。之后的Titles、Bodies、Tags、Categories可以根据自己的喜好...

    老Y文章管理系统源码 V2.2

    用户积分及等级系统,管理员可在后台配置中设定用户发表一篇文章得多少积分,删除扣多少积分等。 前台会员相关的功能包括:用户列表,积分排行,用户搜索(可按籍贯、姓名、性别等等搜索) 4、后台发布文章增加一个...

    MySQL操作之JSON数据类型操作详解

    上一篇文章我们介绍了mysql数据存储过程参数实例详解,今天我们看看MySQL操作之JSON数据类型的相关内容。 概述 mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql...

    ACTCMS网站管理系统 v3.0 build 20100412 UTF8 精简版.rar

    8、强大的文章显示功能,文章除了分页、页数统计这些,还拥有上一篇、下一篇提示、点击数、评论留言、查看权限(收费文章)、投稿系统等强大的功能 9、独创的Tags标签,该功能随着系统使用时间的增加,一个真正属于您...

    原生自定义表格控件outlookgrid

    在这篇文章中,我将解释这个控件怎么用,和它能做什么,并且也包含了什么它不能做,主要把焦点集中在只想要按现在的样子复用该控件的开发组。然后,对于为了他们自己的用途想要扩展或改变这个控件的实现的开发者,我...

    WORD实用奇招妙技大荟萃

    你用Word编辑了一篇文档,将它按双面打印出来后,你有没有想过将页码放置在页面的外侧,这样你的文档看起来就有些与众不同了。要将页码插入到页面的外侧,方法如下:在“插入”菜单中,单击“页码”;再在“位置”框...

    fycms网站管理系统 v2.0 gb2312.rar

    8、强大的文章显示功能,文章除了分页、页数统计这些,还拥有上一篇、下一篇提示、点击数、评论留言、查看权限(收费文章)、投稿系统等强大的功能 9、独创的Tags标签,该功能随着系统使用时间的增加,一个真正属于您...

Global site tag (gtag.js) - Google Analytics