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. 42 【docker】run命令

    最常用的两个option是,网络端口映射,和文件共享 最基本的启动命令(从image创建一个container并启动):docker run -d <image-name> -d:表示守护 ...

  2. Python基础-python数据类型之列表(四)

    列表 格式 namesList = [ 字符串,数字,列表,元祖,集合] 列表中的元素可以是不 同类型的 列表的相关操作 列表中存放的数据是可以进行修改的,比如"增"." ...

  3. swift 警告框 - 自定义按钮颜色,图片

    1.封装 弹框http://www.hangge.com/blog/cache/detail_651.html import UIKit extension UIAlertController { / ...

  4. easyui Tree树形控件的异步加载

    Tree控件 $('#partyOrgTree').tree({ checkbox: false, url: getDataUrl, onClick: function (node) { getDiv ...

  5. How Xtuner E3 works for BMW 520d Diagnosis and initialization of CBS service

    Using Xtuner E3 to perform BMW 520d Diagnosis and initialization of CBS service in step by step proc ...

  6. Linux 自动挂载硬盘的方法

    每次重启后,都需要手动挂载硬盘( sudo mount ),非常不方便,使用一下步骤可以实现硬盘的自动挂载 第一步  获取硬盘的基本信息(UUID TYPE) sudo blkid 第二步  修改 / ...

  7. 为docker配置HTTP代理服务器

    背景: node1不能访问外网, node2可以访问外网,node1通过node2的代理服务来访问外网. 1. node1不能访问外网 vim /etc/resolv.conf 注释掉DNS配置文件 ...

  8. caoni大业 spring boot 跳坑记

    IDEA环境 win10 跑得刚刚,到xp系统就戈壁 报错 Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.g ...

  9. Python3个人学习笔记--每天一点一滴成长!

    简单的while循环:输入一个数字,while获取该数字,并输出该数字. 例子:猜幸运数字是多少? lucky_num = int(input("number:")) a = 0 ...

  10. 兼容IE8的flash上传框架"uploadify"自定义上传按钮样式的办法

    (uploadify版本:3.2.1 ) 因为公司业务的原因,所做的项目需要兼容IE8,因此做的上传插件无奈选择的是基于flash的uploadify. 由于是基于flash的,所以使用过程中,难以给 ...