前言

最简单的排序算法之一是插入排序(insertion sort)。

思路

插入排序的思路是这样的:

插入排序。由N-1趟排序完成,对于i=1到N-1趟,保证从位置0到位置i上的元素为已排序状态(但不保证已排序的值一定小于未排序的值)。

过程:

  • 对于位置i,先把i位置的值保存起来,然后把i挖空。
  • 依次与前一个位置比较,比较i-1到0位置上的元素;
  • 若发现i对应的值小于某个位置的值,则将该位置的值往后移动一位;
  • 最后将tmp填入空位

整个过程就是一个不停的往前插的过程,因此叫插入排序

我们对数列:[2, 12, 6, 15, 8] 进行插入排序


其中,i=1和i=3趟都没发生交换。

代码

/*** 插入排序。由N-1趟排序完成,对于i=1到N-1趟,保证从位置0到位置i上的元素为已排序状态(* 但不保证已排序的值一定小于未排序的值)。* <p>* 过程:对于位置i,先把i位置的值保存起来,然后把i挖空。* 依次与前一个位置比较,比较i-1到0位置上的元素;* 若发现i对应的值小于某个位置的值,则将该位置的值往后移动一位;* 最后将tmp填入空位** 整个过程就是一个不停的往前插的过程,因此叫插入排序** @param a* @param <E>*/
public static <E extends Comparable<? super E>> void insertionSort(E[] a) {int j;for (int i = 1; i < a.length; i++) {E tmp = a[i];//对于位置i,先把i位置对应的值保存起来,然后把i挖空for (j = i; j > 0 && tmp.compareTo(a[j - 1]) < 0 ; j--) {a[j] = a[j - 1];//若发现i对应的值小于某个位置的值,则将该位置的值往后移动一位;}a[j] = tmp;//最后将tmp填入空位}
}

复杂度和稳定性

  • 时间复杂度
    假设被排序的数列中有N个数。遍历一趟的时间复杂度是O(N)O(N)O(N),需要遍历多少次呢?N-1次,因此,插入排序的时间复杂度是O(N2)O(N^2)O(N2)。

  • 插入排序稳定性
    直接插入排序是稳定的算法,它满足稳定算法的定义。
    算法稳定性 – 假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;并且排序之后,a[i]仍然在a[j]前面。则这个排序算法是稳定的!

排序算法之——插入排序分析相关推荐

  1. 排序算法 | 直接插入排序算法的图解、实现、复杂度和稳定性分析

    排序算法 | 直接插入排序算法的图解.实现.复杂度和稳定性分析 目录 1.直接插入排序定义 2.直接插入排序,步骤说明 3.动态图演示 4.代码实现,运行结果 5.算法分析 ① 时间复杂度分析 ② 空 ...

  2. 简单排序算法时间空间复杂度分析及应用(4)-二分插入排序

    简单排序算法时间空间复杂度分析及应用(4)-二分插入排序 背景: 顾名思义,这个二分插入排序是直接插入排序的进化版,主要变化的地方就是在内循环部分,即外循环的循环节点在确定区域的位置查询方式由原来的直 ...

  3. Java常见排序算法之插入排序

    一.概述 本节由小千给大家分享Java常见排序算法之插入排序,之前我们说过排序是算法中的一部分.所以我们学习排序也是算法的入门,为了能让大家感受到排序是算法的一部分,我举个例子证明一下:比如麻将游戏, ...

  4. 排序算法:希尔排序算法实现及分析

    希尔排序算法介绍 希尔排序是D.LShell 与1957年提出来的一种排序算法,在这之前排序算法的时间复杂度都是O(n^2),希尔排序算法是突破这个时间复杂度的第一批算法之一.我们知道直接插入排序算法 ...

  5. 山东大学软件学院大二下数据结构课程设计---排序算法的性能分析

    文章目录 一.题目 二.界面图 主界面 比较和移动次数饼图 比较不同表长的对话框 验证稳定性的对话框 课设录屏 三.题目分析 四.基本思路 五.项目结构 1.开发环境 2.结构介绍 3.关键点及难点 ...

  6. 各种排序算法的稳定性分析

    各种排序算法的稳定性分析 稳定性排序算法 冒泡排序 插入排序 归并问题 不稳定排序算法 选择排序 快速排序 堆排序 各种排序算法思路不清楚的请看 链接 稳定性:稳定性指在排序完成以后,相同元素之间的相 ...

  7. 排序算法:简单选择排序算法实现及分析

    简单选择排序算法介绍 简单选择排序(Simple Selection Sort)就是通过n-1次关键字排序之间的比较,从n-i+1个记录中选择关键字最小的记录,并和第i(1<=i<=n)记 ...

  8. 插入排序 php,常用的排序算法(二)--插入排序(PHP实现)

    常用的排序算法系列 插入排序 插入排序是一种逻辑上非常好理解的排序方式,整个排序的核心就是不断在当前已经排好部分数据的数组里,找到合适的位置插入新数据.就像抓扑克牌,抓一张,然后再手里已经部分已经排好 ...

  9. 插入排序算法 java_排序算法实现-插入排序(Java版本)

    原标题:排序算法实现-插入排序(Java版本) 插入排序(英语:Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到 ...

  10. 数据结构与算法:十大排序算法之插入排序

    数据结构与算法:十大排序算法之插入排序 package TopTenSortingAlgorithms;import java.util.Arrays; import java.util.Scanne ...

最新文章

  1. [20180408]那些函数索引适合字段的查询.txt
  2. C#字符串二进制互换
  3. C#获取一些常用目录
  4. 16位汇编 数据段 栈段 代码段
  5. php的全局p变量程序_php如何定义全局变量
  6. 使用logdashboard查看可视化日志
  7. 光纤以太网交换机产品性能介绍
  8. 【软件开发底层知识修炼】十一 链接器-链接脚本
  9. 《变革中的思索》各路读者评论
  10. 商业计划书范文3000_商业计划书范文(精选)
  11. 传奇服务器修改二级密码,找回传奇玩家账号和二级密码,修改密码和密保
  12. JAVA实现汉字转拼英
  13. python学完基础后实践练习:阿拉伯数字金额转人名币大写
  14. h61 nvme硬盘_切割SN520amp;amp;对比主流NVME2242amp;amp;无硬盘盒迁移系统
  15. Android自定义控件实战——滚动选择器PickerView
  16. 黑苹果Yosemite 10.10.1懒人版完美安装及简单驱动设置
  17. jsp案例:计算矩形、圆形面积
  18. 蛋花花分析到底该不该让孩子学编程
  19. 形式逻辑(普通逻辑)5:直言判断
  20. APP在电脑模拟器上完美运行,真机运行时闪退现象记录

热门文章

  1. C# GUID format参数说明
  2. centos安装python3.7和yum报错解决方法
  3. FTP服务器windows配置
  4. Launch MySQL on my PC
  5. 容器系列之虚拟化网络
  6. 查看windows电脑CPU核心数,线程数
  7. react入门(一)
  8. uva133-救济金发放
  9. selenium--python如何定位一组元素并返回文本值
  10. PE文件结构及其加载机制(四)