插入排序(扫盲)
来源:互联网 发布:淘宝好评评语怎么删除 编辑:程序博客网 时间:2024/05/17 09:29
说到插入排序,先引用维基百科上的一段话,来对其描述:
插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 ——quote from wikipedia (http://zh.wikipedia.org/wiki/%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F)
对插入排序有了一个基本的了解后,下面以升序排列无序数组 {3,5,1,4,6,8} 为例,对插入排序的具体步骤进行说明。
具体步骤:
1.将无序数组按“有序”和“无序”分成前后两个部分。
有序:{} 无序:{3,5,1,4,6,8}
2.将数组的无序部分的第一个数,升序插入到数组有序部分的合适位置(所谓的“插入”,是要伴随着数组中数据的互换操作)。
插入后:有序:{3} 无序:{5,1,4,6,8}
3.循环第二步,直到数组全部有序。
将数组的无序部分的第一个数( 5 ) ,升序插入到数组有序部分的合适位置 (3 的后面):
插入后:有序:{3,5} 无序:{1,4,6,8}
将数组的无序部分的第一个数 ( 1 ),升序插入到数组有序部分的合适位置 (3 的前面):
插入后:有序:{1,3,5} 无序:{4,6,8}
将数组的无序部分的第一个数 ( 4 ),升序插入到数组有序部分的合适位置 (3 和 5 之间):
插入后:有序:{1,3,4,5} 无序:{6,8}
将数组的无序部分的第一个数 ( 6 ),升序插入到数组有序部分的合适位置 (5 的后面):
插入后:有序:{1,3,4,5,6} 无序:{8}
将数组的无序部分的第一个数 ( 8 ),升序插入到数组有序部分的合适位置 (6 的后面):
插入后:有序:{1,3,4,5,6,8} 无序:{}
Java语言算法实现:
接着再引用维基百科上的一段话,对插入排序算法的时间复杂度进行说明:
如果目标是把n个元素的序列升序排列,那么采用插入排序存在最好情况和最坏情况。最好情况就是,序列已经是升序排列了,在这种情况下,需要进行的比较操作需(n-1)次即可。最坏情况就是,序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次。插入排序的赋值操作是比较操作的次数减去(n-1)次。平均来说插入排序算法复杂度为O(n2)。因而,插入排序不适合对于数据量比较大的排序应用。但是,如果需要排序的数据量很小,例如,量级小于千,那么插入排序还是一个不错的选择。 插入排序在工业级库中也有着广泛的应用,在STL的sort算法和stdlib的qsort算法中,都将插入排序作为快速排序的补充,用于少量元素的排序(通常为8个或以下)。 ——quote from wikipedia (http://zh.wikipedia.org/wiki/%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F)
reference:
1.《Algorithms》(中文版)Robert Sedgewick , Kevin Wayne 著,谢路云 译 P157~P159
2.百度百科:http://baike.baidu.com/view/396887.htm
3.维基百科:http://zh.wikipedia.org/wiki/%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F
- 插入排序(扫盲)
- 插入排序(折半插入)
- 插入排序(希尔排序、直接插入、折半插入排序)
- 数据结构-插入排序(直接插入排序+折半插入排序)
- 插入排序(简单插入&折半插入)
- 排序算法扫盲
- 排序算法扫盲
- 插入排序一(直接插入排序)
- 插入排序(普通插入 希尔排序)
- 算法---插入排序(直接插入排序)
- 内部排序之插入排序(直接插入排序,二分插入排序,希尔插入排序)
- 排序:插入排序(直接插入排序、Shell排序)
- 【排序】插入排序(直接插入排序、希尔排序)
- 【排序一】插入排序(直接插入排序&&希尔排序)
- 排序(之插入排序)
- 1.排序(插入排序)
- 排序(直接插入排序)
- 排序(一)----插入排序
- matlab 2013b for linux
- Java类的继承和覆盖
- windows下matlab, R 等语言的批处理
- 泰克将举办全新WiFI及射频测试在线技术讲座
- hdu 2553 n皇后问题
- 插入排序(扫盲)
- 网站做SEO一定得建设外接?这是一个误区
- Java类的多态
- 水的一米的水仙花
- mark
- VS MONO Android开发控件悬浮显示提醒 自定义背景颜色、字体、数字颜色、摆放位置
- cocos2d-x 2.0通过CCAnimation实例获取CCSpriteFrame
- linux下C语言utf-8编码与gb2312转换代码---libiconv
- user is not in the sudoers file 的解决办法