直接插入排序(Straight Insertion Sort)是一种简单的排序方法。

基本思想

假设待排序的记录存放在数组r[0..n-1]中。开始时,先将第0个记录组成一个有序的子表,然后依次将后面的记录插入到这个子表中,并且一直保持这个子表的有序,知道全部记录插入完成为止。

主要步骤

  1. 将r[i]暂存在临时变量tmp中
  2. 将tmp与r[j](j=i-1,i-2,…,0)一次比较,如果tmp<r[j],则将r[j]后移一个位置,知道tmp>r[j]为止,此时j+1是r[i]的插入位置
  3. 将tmp插入到r[j+1]
  4. 令i=1,2,3,…,n-1,重复1-3

性能

空间复杂度:只使用了tmp一个临时变量,空间复杂度为O(1)O(1)。

时间复杂度:最好的情况是全部有序,只需要比较n-1次,不需要移动,为O(n)O(n);最坏的情况为逆序,为O(n2)O(n^2);平均为为O(n2)O(n^2)。

稳定性:是稳定的排序方法。

java代码实现:

public static <T extends Comparable<T>> void insertSort(T[] arr) {T tmp = null;int i, j;for (i = 1; i < arr.length; i++) {tmp = arr[i];for (j = i; j > 0 && tmp.compareTo(arr[j - 1]) < 0; j--) {arr[j] = arr[j - 1];}arr[j] = tmp;}}

参考:
1. 刘小晶,数据结构——Java语言描述(第2版),清华大学出版社
2. MARK A W, 数据结构与算法分析: Java 语言描述,机械工业出版社

数据结构之排序:直接插入排序相关推荐

  1. ****** 四 ******、软设笔记【数据结构】-排序、插入排序、选择排序

    一.排序     将一组杂乱无章的数据按一定的规律次序排列起来.     排序的目的是什么?         *便于查找!     排序算法的好坏如何衡量?         *时间效率--排序速度(即 ...

  2. java数据结构排序实验报告_java数据结构与算法之插入排序详解

    本文实例讲述了java数据结构与算法之插入排序.分享给大家供大家参考,具体如下: 复习之余,就将数据结构中关于排序的这块知识点整理了一下,写下来是想与更多的人分享,最关键的是做一备份,为方便以后查阅. ...

  3. 算法与数据结构(冒泡排序,选择排序和插入排序的总结)

    冒泡排序,选择排序和插入排序的总结 在规模较小时,或者元素的有序性较高时,插入排序的时间复杂度可以接近 O(n) ,是上述三种排序里表现最好的 一.通过表格我们可以发现,冒泡排序的时间复杂度是要优于选 ...

  4. 数据结构与算法 | 直接插入排序、希尔排序

    前几章讲了选择排序中的直直接选择排序.双向选择排序.堆排序,这次来讲讲利用'插入'为核心来实现的插入排序算法. 插入排序 把待排序的记录按其关键码值的大小逐个插入到一 个已经排好序的有序序列中,直到所 ...

  5. 【Java数据结构与算法】第七章 冒泡排序、选择排序、插入排序和希尔排序

    第七章 冒泡排序.选择排序.插入排序和希尔排序 文章目录 第七章 冒泡排序.选择排序.插入排序和希尔排序 一.冒泡排序 1.基本介绍 2.代码实现 二.选择排序 1.基本介绍 2.代码实现 三.插入排 ...

  6. 【数据结构】排序算法及优化整理

    排序算法 排序算法 选择排序 Selection Sort 插入排序 Insertion Sort 归并算法 Merge Sort 快速排序 Quick Sort 堆排序 Heap Sort 二叉堆的 ...

  7. 【数据结构】排序相关题目及各种排序方法的总结

    [数据结构之排序] 常用的排序方法有:直接插入排序.希尔排序.冒泡排序.快速排序.简单选择排序.树形选择排序.堆排序.归并排序.基数排序 提示:如有不理解的知识点,请看B站最好的数据结构老师王卓老师的 ...

  8. 数据结构与算法之插入排序

    数据结构与算法之插入排序 目录 插入排序介绍 插入排序思路分析 代码实现 1. 插入排序介绍 插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的. 2. 插 ...

  9. 数据结构-王道-排序

    排序 关于排序算法的视频演示 直接插入排序 从上面的插入排序思想中,不难得到一种简单直接的插入排序算法.假设待排序表在某次过程中属于这种情况. |有序序列\(L[1\ldots i-1]\)|L(i) ...

  10. 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...

最新文章

  1. 分享Kali Linux 2017年第30周镜像文件
  2. 在.Net Core中实现一个WebSocket路由
  3. c语言dll创建线程,教大家写一个远程线程的DLL注入,其实还是蛮简单的……………………...
  4. 协同工作php,PHPOA:灵活、高效、协同,让企业高效运转
  5. centos JDK安装
  6. POJ 1981 Circle and Points 单位圆覆盖
  7. JavaRebel 2.0 发布,一个JVM插件
  8. 怎么回滚版本_Win 10 暂停更新及回滚方法
  9. sqlserver200864位下载_SQL Server 2008 官方简体中文正式版
  10. 欧姆龙cp1h指令讲解_欧姆龙cp1h常用指令学习(十五)网络通讯指令SEND,RECV,CMND...
  11. 联想计算机无线网络设置密码,联想(Lenovo)路由器怎么设置密码?
  12. 服务器系统做双备份,云服务器如何做双机热备份
  13. 设有一个 Student 数据库,包括 数据库,包括 学生 , 课程 , 选修三个关系: 三个关系: 学生 学生:S ( Sno ,Sname ,Ssex ,Sage,Sdept ) 课程 课程:
  14. 广告效果评估及评价体系
  15. ept技术_Intel虚拟化技术——EPT、VPID
  16. 高通8996启动流程-2.总体启动流程
  17. 航测无人机-任务规划模块 竞品分析
  18. 微信小程序实现地图导航功能
  19. HTML春节贺卡,HTML5+CSS3实现春节贺卡
  20. IP-GUARD加密文件无法打开或者打开时显示乱码

热门文章

  1. CPU位数、操作系统位数、指令集、寄存器位数、机器字长等
  2. 杭电多校第六场个人补题6 7 9 10 12
  3. 假定网络中的路由器B的路由表有如下的项目(这三列分别表示“目的网络”、“距离”和“下一跳路由器”):
  4. epub格式电子书制作工具——ep…
  5. Android wms粗略介绍
  6. JAVA面试、笔试题
  7. linux鼠标箭头消失了,Ubuntu 16.04 鼠标光标消失的解决方法(右键可弹窗,可以点击)...
  8. 基于微信小程序的音乐播放器设计
  9. Rockchip Linux CMA开发文档
  10. 打开国庆的正确方式,用Python轻松生成国庆版头像