排序—插入排序
时间:2020-06-06
本文章向大家介绍排序—插入排序,主要包括排序—插入排序使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
许久没有写点东西了,答辩之后人也变得松懈。今天看到简书又有人点赞之前记录的冒泡排序,点进去一看,居然有4w+的阅读量,心生疑问,咋会有这么高的阅读量,打开百度搜索冒泡排序,结果第3条就是我的。点开认真看了看,其实写得不好,还改了两个错别字(狗头),这个阅读量或许只是记录的点击量。但我萌生一个想法,趁现在有时间,想把排序系列做完,便于以后自己回顾。
排序系列传递门
排序—冒泡排序
排序—选择排序
排序—快速排序
排序—插入排序
排序-希尔排序(待完善)
排序—归并排序(待完善)
排序—基数排序(待完善)
排序—堆排序(待完善)
排序—桶排序(待完善)
排序—计数排序(待完善)
排序—排序算法总结(待完善)
插入排序思想
基本思想是在一个有序的序列
中找到待排序元素的位置,比如将3
插入-1,2,4,6
这个有序序列中,先与6和4比较,直到和2比较之后,找到适合插入的位置(2之后)。
下面以按升序排序为例:
- step1 第一个元素默认有序。
- step2 取待排序的元素B,在有序序列上从后往前寻找。
- step3 如果已排序元素A大于待排序的元素B,则将A往后移动一位。
- step4 重复step3,直到找到元素A<=B(待排序)时或者有序序列全部被扫描。将待排序元素A插入。
- 重复step2—step4
动图展示(图片来源见参考资料)
代码实现(java)
/**
* 插入排序
* @param arr
*/
public static void insertSort(int[] arr) {
if(arr == null || arr.length == 0)
return;
int curEle, preIndex; // 记录当前待排序元素和前一个元素的下标
for(int i = 0; i < arr.length; i++) {
preIndex = i - 1;
curEle = arr[i];
while(preIndex >=0 && arr[preIndex] > curEle){
arr[preIndex + 1] = arr[preIndex]; // 移动元素
preIndex--;
}
// 将待排序元素插入新的位置
arr[preIndex + 1] = curEle;
}
}
算法分析
时间复杂度:$O(n^2)$
空间复杂度:$O(1)$
稳定性:稳定
参考资料
最后
本文若有不当,请指出。
此致,敬礼!
原文地址:https://www.cnblogs.com/numen-fan/p/13056283.html
- 跟鹅厂老司机学技术之一:“遇见” Kotlin
- 简单的 H5 视频推流解决方案
- 来腾讯云开发者实验室学习.NET
- 跨域资源共享(CORS)在ASP.NET Web API中是如何实现的?
- 使用腾讯云 GPU 学习深度学习系列之六:物体的识别与定位
- npm5 新版功能特性解析及与 yarn 评测对比
- H5直播避坑指南
- 龙门阵之 DevOps 门外汉须知
- 全面进阶 H5 直播(上)
- 这年头,不会斗图都毕不了业?
- 龙妈也会死?《权力的游戏》 AI 算法预测丹妮女王危在旦夕
- 腾讯云 GAME-TECH 沙龙干货回顾:海外网络拓展及质量把控
- 通过扩展让ASP.NET Web API支持W3C的CORS规范
- 腾讯云GAME-TECH沙龙干货回顾:腾讯游戏云全球化实践
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- (数据科学学习手札95)elyra——jupyter lab平台最强插件集
- Python 序列化/反序列化自定义类型
- Windows10下使用VS2017编译和使用yaml-cpp库
- CentOS7下编译yaml-cpp库
- SAP Spartacus CurrentProductService返回的null对象
- SAP Spartacus产品明细页面用Observable显示产品名称
- 关于rxjs里operators filter和map的详细讨论
- 用代码查看SAP Spartacus购物车内的行项目
- rxjs的map和switchMap在SAP Spartacus中的应用
- 用代码查看SAP Spartacus购物车内的行项目
- rxjs fromEvent的用法
- Python2和Python3的区别简单总结
- Django操作数据库
- Hive元数据服务MetaStore
- Linux---Shell脚本字符显示特殊颜色效果