数据结构之排序:直接插入排序
直接插入排序(Straight Insertion Sort)是一种简单的排序方法。
基本思想
假设待排序的记录存放在数组r[0..n-1]中。开始时,先将第0个记录组成一个有序的子表,然后依次将后面的记录插入到这个子表中,并且一直保持这个子表的有序,知道全部记录插入完成为止。
主要步骤
- 将r[i]暂存在临时变量tmp中
- 将tmp与r[j](j=i-1,i-2,…,0)一次比较,如果
tmp<r[j]
,则将r[j]后移一个位置,知道tmp>r[j]
为止,此时j+1是r[i]的插入位置 - 将tmp插入到r[j+1]
- 令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 语言描述,机械工业出版社
数据结构之排序:直接插入排序相关推荐
- ****** 四 ******、软设笔记【数据结构】-排序、插入排序、选择排序
一.排序 将一组杂乱无章的数据按一定的规律次序排列起来. 排序的目的是什么? *便于查找! 排序算法的好坏如何衡量? *时间效率--排序速度(即 ...
- java数据结构排序实验报告_java数据结构与算法之插入排序详解
本文实例讲述了java数据结构与算法之插入排序.分享给大家供大家参考,具体如下: 复习之余,就将数据结构中关于排序的这块知识点整理了一下,写下来是想与更多的人分享,最关键的是做一备份,为方便以后查阅. ...
- 算法与数据结构(冒泡排序,选择排序和插入排序的总结)
冒泡排序,选择排序和插入排序的总结 在规模较小时,或者元素的有序性较高时,插入排序的时间复杂度可以接近 O(n) ,是上述三种排序里表现最好的 一.通过表格我们可以发现,冒泡排序的时间复杂度是要优于选 ...
- 数据结构与算法 | 直接插入排序、希尔排序
前几章讲了选择排序中的直直接选择排序.双向选择排序.堆排序,这次来讲讲利用'插入'为核心来实现的插入排序算法. 插入排序 把待排序的记录按其关键码值的大小逐个插入到一 个已经排好序的有序序列中,直到所 ...
- 【Java数据结构与算法】第七章 冒泡排序、选择排序、插入排序和希尔排序
第七章 冒泡排序.选择排序.插入排序和希尔排序 文章目录 第七章 冒泡排序.选择排序.插入排序和希尔排序 一.冒泡排序 1.基本介绍 2.代码实现 二.选择排序 1.基本介绍 2.代码实现 三.插入排 ...
- 【数据结构】排序算法及优化整理
排序算法 排序算法 选择排序 Selection Sort 插入排序 Insertion Sort 归并算法 Merge Sort 快速排序 Quick Sort 堆排序 Heap Sort 二叉堆的 ...
- 【数据结构】排序相关题目及各种排序方法的总结
[数据结构之排序] 常用的排序方法有:直接插入排序.希尔排序.冒泡排序.快速排序.简单选择排序.树形选择排序.堆排序.归并排序.基数排序 提示:如有不理解的知识点,请看B站最好的数据结构老师王卓老师的 ...
- 数据结构与算法之插入排序
数据结构与算法之插入排序 目录 插入排序介绍 插入排序思路分析 代码实现 1. 插入排序介绍 插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的. 2. 插 ...
- 数据结构-王道-排序
排序 关于排序算法的视频演示 直接插入排序 从上面的插入排序思想中,不难得到一种简单直接的插入排序算法.假设待排序表在某次过程中属于这种情况. |有序序列\(L[1\ldots i-1]\)|L(i) ...
- 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序
冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...
最新文章
- 分享Kali Linux 2017年第30周镜像文件
- 在.Net Core中实现一个WebSocket路由
- c语言dll创建线程,教大家写一个远程线程的DLL注入,其实还是蛮简单的……………………...
- 协同工作php,PHPOA:灵活、高效、协同,让企业高效运转
- centos JDK安装
- POJ 1981 Circle and Points 单位圆覆盖
- JavaRebel 2.0 发布,一个JVM插件
- 怎么回滚版本_Win 10 暂停更新及回滚方法
- sqlserver200864位下载_SQL Server 2008 官方简体中文正式版
- 欧姆龙cp1h指令讲解_欧姆龙cp1h常用指令学习(十五)网络通讯指令SEND,RECV,CMND...
- 联想计算机无线网络设置密码,联想(Lenovo)路由器怎么设置密码?
- 服务器系统做双备份,云服务器如何做双机热备份
- 设有一个 Student 数据库,包括 数据库,包括 学生 , 课程 , 选修三个关系: 三个关系: 学生 学生:S ( Sno ,Sname ,Ssex ,Sage,Sdept ) 课程 课程:
- 广告效果评估及评价体系
- ept技术_Intel虚拟化技术——EPT、VPID
- 高通8996启动流程-2.总体启动流程
- 航测无人机-任务规划模块 竞品分析
- 微信小程序实现地图导航功能
- HTML春节贺卡,HTML5+CSS3实现春节贺卡
- IP-GUARD加密文件无法打开或者打开时显示乱码
热门文章
- CPU位数、操作系统位数、指令集、寄存器位数、机器字长等
- 杭电多校第六场个人补题6 7 9 10 12
- 假定网络中的路由器B的路由表有如下的项目(这三列分别表示“目的网络”、“距离”和“下一跳路由器”):
- epub格式电子书制作工具——ep…
- Android wms粗略介绍
- JAVA面试、笔试题
- linux鼠标箭头消失了,Ubuntu 16.04 鼠标光标消失的解决方法(右键可弹窗,可以点击)...
- 基于微信小程序的音乐播放器设计
- Rockchip Linux CMA开发文档
- 打开国庆的正确方式,用Python轻松生成国庆版头像