1、原理:从整个待排序列中选出一个元素插入到已经有序的子序列中去,得到一个有序的、元素加一的子序列,直到整个序列的待插入元素为0,则整个序列全部有序。

2、思路:

  (1)设置监视哨r[0],将待插入的记录值赋值给r[0];

  (2)设置开始查找的位置j;

  (3)在数组中搜索,搜索 中将第j个记录后移,直到r[0].key>=r[j].key为止

  (4)将r[0]插入r[j+1]的位置上。

3、举例

  (1)待排序数组:[42, 20, 17, 13, 28, 14, 23, 15]

  (2)第一趟排序:[42, 20, 17, 13, 28, 14, 23, 15]

    将r[0]=42设置为监视哨,将1位置上的数20和监视哨42进行比较,20小于42,将42和20交换。

    排序结果为:[20, 42, 17, 13, 28, 14, 23, 15],此时0-1范围上的数值大小已经排好了。

  (3)第二趟比较:[20, 42, 17, 13, 28, 14, 23, 15]

    将17和42进行比较,17比42小,交换位置,排序结果为:[20, 17, 42, 13, 28, 14, 23, 15]

    将17和20进行比较,17比20小,交换位置,排序结果为:[17, 20, 42, 13, 28, 14, 23, 15]

    排序结果为:[17, 20, 42, 13, 28, 14, 23, 15],此时0-2范围上的数值大小已经排好了。

  (4)第三趟比较:[17, 20, 42, 13, 28, 14, 23, 15]

    将13和42做比较,13比42小,交换位置,排序结果为:[17, 20, 13, 42, 28, 14, 23, 15]

    将13和20做比较,13比20小,交换位置,排序结果为:[17, 13, 20, 42, 28, 14, 23, 15]

    将13和17做比较,13比17小,交换位置,排序结果为:[13, 17, 20, 42, 28, 14, 23, 15]

    排序结果为:[13, 17, 20, 42, 28, 14, 23, 15],此时0-3范围上的数值大小已经排好了。

  (5)第四趟比较:[13, 17, 20, 42, 28, 14, 23, 15]

    将28和42做比较,28比42小,交换位置,排序结果为:[13, 17, 20, 28, 42, 14, 23, 15]

    将28和20做比较,28比20大,不交换位置。

    排序结果为:[13, 17, 20, 28, 42, 14, 23, 15],此时0-4范围上的数值大小已经排好了。

  (6)第五趟比较:[13, 17, 20, 28, 42, 14, 23, 15]

    将14和42做比较,14比42小,交换位置,排序结果为:[13, 17, 20, 28, 14, 42, 23, 15]

    将14和28做比较,14比28小,交换位置,排序结果为:[13, 17, 20, 14, 28, 42, 23, 15]

    将14和20做比较,14比20小,交换位置,排序结果为:[13, 17, 14, 20, 28, 42, 23, 15]

    将14和17做比较,14比17小,交换位置,排序结果为:[13, 14, 17, 20, 28, 42, 23, 15]

    将14和13做比较,14比13大,不交换位置。

    排序结果为:[13, 14, 17, 20, 28, 42, 23, 15],此时0-5范围上的数值大小已经排好了。

  (7)第六趟比较:[13, 14, 17, 20, 28, 42, 23, 15]

    将23和42做比较,23比42小,交换位置,排序结果为:[13, 14, 17, 20, 28, 23, 42, 15]

    将23和28做比较,23比28小,交换位置,排序结果为:[13, 14, 17, 20, 23, 28, 42, 15]

    将23和20做比较,23比20大,不交换位置。

    排序结果为:[13, 14, 17, 20, 23, 28, 42, 15],此时0-6范围上的数值大小已经排好了。

  (8)第七趟比较:[13, 14, 17, 20, 23, 28, 42, 15]

    将15和42做比较,15比42小,交换位置,排序结果为:[13, 14, 17, 20, 23, 28, 15, 42]

    将15和28做比较,15比28小,交换位置,排序结果为:[13, 14, 17, 20, 23, 15, 28, 42]

    将15和23做比较,15比23小,交换位置,排序结果为:[13, 14, 17, 20, 15, 23, 28, 42]

    将15和20做比较,15比20小,交换位置,排序结果为:[13, 14, 17, 15, 20, 23, 28, 42]

    将15和17做比较,15比17小,交换位置,排序结果为:[13, 14, 15, 17, 20, 23, 28, 42]

    将15和14做比较,15比14大,不交换位置。

    排序结果为:[13, 14, 15, 17, 20, 23, 28, 42],此时0-7范围上的数值大小已经排好了。

  插入排序完成。

4、过程:

平均时间复杂度:O(n2)

5、java代码实现:

/**
* 插入排序
*
* @author Administrator
*
*/
public class InsertSort
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = new int[] { 42, 20, 17, 13, 28, 14, 23, 15 };
insertSort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
} private static void insertSort(int[] a) {
for (int i = 0; i < a.length - 1; i++) {
for (int j = i + 1; j > 0; j--) {
if (a[j] < a[j - 1]) {
int temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
} else {
break;
}
}
}
} }

插入排序——Insertion Sort的更多相关文章

  1. 经典排序算法 – 插入排序Insertion sort

    经典排序算法 – 插入排序Insertion sort  插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕. 插入排序方法分直接插入排序和折半插入排序两种, ...

  2. 排序算法--插入排序(Insertion Sort)_C#程序实现

    排序算法--插入排序(Insertion Sort)_C#程序实现 排序(Sort)是计算机程序设计中的一种重要操作,也是日常生活中经常遇到的问题.例如,字典中的单词是以字母的顺序排列,否则,使用起来 ...

  3. 跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort)

    跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort) 选择排序(selection sort) 算法原理:有一筐苹果,先挑出最大的一个放在最后,然后 ...

  4. [算法] 插入排序 Insertion Sort

    插入排序(Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-pla ...

  5. 排序算法 - 插入排序(Insertion sort)

    插入排序对于少量元素的排序是很高效的,而且这个排序的手法在每个人生活中也是有的哦. 你可能没有意识到,当你打牌的时候,就是用的插入排序. 概念 从桌上的牌堆摸牌,牌堆内是杂乱无序的,但是我们摸上牌的时 ...

  6. [Swift]LeetCode147. 对链表进行插入排序 | Insertion Sort List

    Sort a linked list using insertion sort. A graphical example of insertion sort. The partial sorted l ...

  7. 排序算法一:插入排序(Insertion sort)

    最近从网易公开课在看麻省理工学院的公开课<算法导论>,感觉还不错,接下来几篇文章所示学习日记了,不准备对算法细节做过多描述,感兴趣的可以自己去看. 文章分几篇讲经典排序算法,直接上代码,根 ...

  8. 插入排序 Insertion Sort

    插入排序算法的运作如下: 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. 插入排序算法的实现我放在这里. 时间/空间复杂度: 最差时间复杂度 O(n^2) 最优时间 ...

  9. 插入排序Insertion Sort

    插入排序:将一个数据插入到一个已经排好序的有序数据序列中,从而得到一个新的.个数+1的有序数列:插入排序适用于少量数据排序,时间复杂度为O(n^2). 实现思路:1.对于一个无序数组,选取第一个元素, ...

随机推荐

  1. Python面向对象中的classmethod类方法和__getattr__方法介绍

    一.classmethod介绍 介绍:@classmethod修饰符我们从名称就可以知道,这是一个类方法,那么和普通的类中的方法有什么不同的 a.类方法,是由类本身调用的,无需实例化类,直接用类本身调 ...

  2. Head First Servlets & JSP 学习笔记 第十三章 —— 过滤器的威力

    过滤器可能是最强大的Web应用开发工具了! 与Servlet非常类似,过滤器就是Java组件,请求发送到Servlet之前,可以用过滤器截获和处理请求:另外Servlet结束工作之后,但在响应发回给客 ...

  3. 微信小程序之----制作视频弹幕

    1. 文件目录     使用微信, 长度单位使用 rpx 可以避免不同设备的样式调试问题     经验总结,之前一直使用px ,发现换了测试机就崩了        2. index.wxml页面设置v ...

  4. node.js中实现http服务器与浏览器之间的内容缓存

    一.缓存的作用 1.减少了数据传输,节约流量. 2.减少服务器压力,提高服务器性能. 3.加快客户端加载页面的速度. 二.缓存的分类 1.强制缓存,如果缓存有效,则不需要与服务器发生交互,直接使用缓存 ...

  5. node.js中使用zlib模块进行数据压缩和解压

    我们可以使用 zlib 模块来对数据进行压缩和解压处理,减小数据体积,加快传输速度. 一.通过创建转换流,对文件进行压缩和解压 const fs = require('fs'); const zlib ...

  6. java 遇到的问题

    1.list.sort(new Comparator<String>() { @override public int compare(String o1, String o2) { re ...

  7. python 常用标准库

    标准库和第三方库第一手资料: 在线: 官方文档(https://docs.python.org/) 离线:交互式解释器(dir().help()函数),IPython(tab键提示.?.??) 一.  ...

  8. HTML中调用JavaScript的几种情况和规范写法

    JavaScript执行在html中,引用有几种方式? 我知道的方法有3种: 第一种:外部引用远程JavaScript文件.如<script type="text/javascript ...

  9. MPLAB X IDE V4.15 创建工程,编译,问题处理

    初步接触,有错误的地方还请大神们务必提出来,防止误导他人 硬件环境:MCU--PIC18F67K22 仿真下载器--ICD 3 编译环境:MPLAB X IDE V4.15 中文版 工作需要接触到了P ...

  10. GBDT(MART) 迭代决策树详解

    在网上看到一篇对从代码层面理解gbdt比较好的文章,转载记录一下: GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Re ...