Java数据结构与算法——插入排序
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流。
前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督。本篇文章介绍排序算法中插入排序算法,包括插入排序的思路,适用场景,性能分析,java代码等
0、其他排序算法索引(待更)
java数据结构与算法——快速排序
java数据结构与算法——桶排序
1、插入排序的思想及原理
插入排序一般分为直接插入排序
和二分插入排序
,本文只介绍直接插入排序,两者的区别仅在于插入的方式不一样。
插入排序是在待排序数组里插入数据。一般我们认为插入排序就是往一个已经排好序的数列中插入一个元素,使得插入这个数以后,数组仍然有序。
下面具体介绍下插入排序的思路:
- 首先需要明确待排序的数组由两部分组成,一部分是已经排好序的部分,另一部分是待排序的部分。
- 接着我们每次选取待排序部分的第一个元素,分别与前面排好序的元素进行比较。当大于前面元素时,可以将该元素直接进入已排好序的部分; 当小于前面元素时,需要把这个元素拿出来暂存,将前面的元素后移,继续与前面的元素相比,直到比较到数组第一个元素或者出现第一个小于拿出的这个元素,这时停止比较、移动,直接把这个元素放到当前空位上。
- 一直重复步骤2,直到待排元素已经没有元素可进行插入时,停止操作,当前数列为已排好序的数列。
2、插入排序java代码实现
首先最外层必定有个大循环,用于待排序部分的数列。还需要一个内层循环,分别与前面排好序的部分进行比较和移动,直到找到位置可以进行插入。参照扑克牌摸牌后排序
public class InsertSort {private int[] array;public InsertSort(int[] array){this.array = array;}public void insertSort(){if(array==null){throw new RuntimeException("没有待排数组");}int length = array.length;if(length>0){for(int i=1;i<length;i++){int temp = array[i]; //记录未排好序的第一个元素为tempint j = i; for(;j>0&&array[j-1]>temp;j--){ //原理中的步骤2array[j] = array[j-1]; //移位}array[j] = temp; //插入}}}public void print(){ //用于打印排完序后的数组for(int i=0;i<array.length;i++){System.out.println(array[i]);}}
}
测试程序
public class SortTest {public static void main(String[] args) {insertSortTest();}private static void insertSortTest(){int[] array = {3,5,0,7,1,4,6};InsertSort is = new InsertSort(array);is.insertSort();is.print();}
}
3、插入排序的特点及性能
插入排序和玩扑克牌摸牌后在手中排序一样的原理,比较容易理解。插入排序在序列近似有序时,效率比较高,因为此时减少了比较和移动的次数。
从原理和代码来看,插入排序的时间复杂度尾O(n^2),外层循环执行n次,内层在最坏的情况下也执行n次,并且除了比较操作还有移动操作。最好的情况是序列近似有序,这时内层循环只需比较及移动较少个元素即可完成。当序列本身有序时,插入排序的时间复杂度为O(n)。因此,在数列越有序,效率越高。
空间复杂度为O(1),是常量级的。因为只用了一个变量暂存每次未排好序的首个元素。
插入排序是稳定的排序算法,因为是在相对排好序的基础上进行比较和移动,所以可以保持相对顺序不变,所以是稳定的排序算法。
4、插入排序的适用场景
插入排序的特点是在近似有序的情况下效率比较高。但因为其时间复杂度为O(n^2),所以通常并不单独适用。在所有的排序算法中,我们优先使用快速排序。快速排序在分区规模达到一定的值时(比如10左右),我们改用插入排序算法排该分区。因为此时的分区内数据往往是近似有序的,所以使用快排并不一定优于插入排序。在很多高级语言在内部对快速排序的实现中,也是在分区达到一定规模改用插入排序来排该分区。
其他排序算法索引(待更)
java数据结构与算法——快速排序
java数据结构与算法——桶排序
码字不易,如对您有帮助,欢迎点赞收藏打赏^_^
Java数据结构与算法——插入排序相关推荐
- 【笔记】Java数据结构与算法
[笔记]Java数据结构与算法 文章目录 [笔记]Java数据结构与算法 1.八大排序应用场景 2.未完待续-- 1.八大排序应用场景 冒泡排序:优化后的冒泡排序可用于当数据已经基本有序,且数据量较小 ...
- Java数据结构与算法(二)
Java数据结构与算法(二) 第六章 递归 1 递归应用场景 2 递归的概念 3 递归调用机制 4 递归能解决什么样的问题 5 递归需要遵守的重要规则 6 递归-迷宫问题 6.1 迷宫问题 6.2 代 ...
- Java数据结构和算法(第二版)
Java数据结构和算法(第二版) 下载地址 https://pan.baidu.com/s/112D5houIgu0eMs_i5o0Ujw 扫码下面二维码关注公众号回复 100066获取分享码 本书目 ...
- Java数据结构和算法 - 递归
三角数字 Q: 什么是三角数字? A: 据说一群在毕达哥拉斯领导下工作的古希腊的数学家,发现了在数学序列1,3,6,10,15,21,--中有一种奇特的联系.这个数列中的第N项是由第N-1项加N得到的 ...
- 数据结构 - Java -韩顺平 图解Java数据结构和算法
数据结构 Lesson 1 数据结构的知识总结 1. 几个经典的算法面试题 2. 线性结构与非线性结构 2.1 稀疏数组 sparsearray 2.2 队列 2.2.1 顺序队列: 2.2.2 环形 ...
- 一.Java数据结构与算法:如何开始
数据结构和算法是计算机科学的核心概念之一,它们在软件开发中起着至关重要的作用.学习Java数据结构和算法不仅有助于提高编程能力,还能让你在面试和职业发展中脱颖而出.本文将为你介绍数据结构和算法的重要性 ...
- 【Java面试高频问题】Java数据结构和算法基础知识汇总
文章目录 Java数据结构和算法基础知识 一.Java数据结构 1. 线性结构:数组.队列.链表和栈 1.1 数组(Array) 1.2 稀疏数组 1.3 队列(Queue) 1.4 链表(Linke ...
- Java 数据结构与算法系列之冒泡排序
一.前言 相信大部分同学都已经学过数据结构与算法这门课了,并且我们可能都会发现一个现象就是我们所学过的数据结构与算法类的书籍基本都是使用 C 语言来写的,好像没见过使用 Java 写的数据结构与算法. ...
- Java数据结构与算法——树(基本概念,很重要)
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 有网友私信我,期待我的下一篇数据结构.非常荣幸文章被认可,也非常感谢你们的监督. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督 ...
最新文章
- 吊打一切:YOLOv4的tricks汇总
- Response_案例4_验证码_点击切换
- 不借助 Fiori client,直接在手机浏览器里调用 SAP UI5 BarcodeScanner 实现条形码扫描的可能性?
- 前端学习(2519):路由和请求
- HDU-5876 Sparse Graph
- 测试线程的状态(Java)
- linux浮动ip添加 手动,在Linux 双机下自己手动实现浮动ip技术
- 2010-2020年全国poi兴趣点
- 54部经典国外动画片---送给70-80年代的朋友
- linux 局域网桌面共享软件,能多人跨终端实时共享屏幕的软件-连通宝
- 使用H5编写网页版象棋(源码)
- PicGo配置阿里云OSS
- Am3358增加Uboot的logo显示 增加Uboot自定义命令控制LCD
- FPGA芯片结构(可编程输入输出单元IOB/可配置逻辑块CLB/数字时钟管理模块DCM/ 嵌入式块RAM(BRAM)/丰富的布线资源/ 底层内嵌功能单元/内嵌专用硬核)
- 安全防御(三)--- IDS、防火墙入侵防御
- 【Visual C++】游戏开发五十二 浅墨DirectX教程二十 骨骼动画来袭(一)
- 如何成功打造你自己的“个人品牌”
- 【Ubuntu】Ubuntu常见优化设置
- 阿里云大数据分析师ACP认证 视频教程
- 51单片机:直流电机与步进电机
热门文章
- python从入门到精通怎么样-Python从入门到精通:一个月就够了
- python自动化测试视频百度云-python接口自动化测试视频教程全集
- 九九乘法表口诀python-Python 九九乘法表
- python线下培训-Python培训是应该选择线上还是线下呢?
- python while循环语句-Python
- 零基础自学python教程-零基础人员可以学习python吗?|Python培训基础教程
- python学精通要多久-零基础零经验自学Python,到精通Python要多久啊?
- redux-thunk的简单使用
- spring中Converter如何注入的
- 深入浅出计算机组成原理学习笔记:高速缓存(下)-你确定你的数据更新了么?(第38讲)...