十大经典排序算法-插入排序算法详解
一、什么是插入排序1.概念插入排序(Insertion Sort)是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入2.算法原理这是一个无序数列:1、5、4、2、6、3,我们要将它按从小到大排序。按照插入排序的思想,我们先指定有序序列,再将无序序列插入有序序列的相应位置将第一个元素1作为有序数据,此时有序区只有一个元素第一轮,让
十大经典排序算法
- 十大经典排序算法-冒泡排序算法详解
- 十大经典排序算法-选择排序算法详解
- 十大经典排序算法-插入排序算法详解
- 十大经典排序算法-希尔排序算法详解
- 十大经典排序算法-快速排序算法详解
- 十大经典排序算法-归并排序算法详解
- 十大经典排序算法-堆排序算法详解
- 十大经典排序算法-计数排序算法详解
- 十大经典排序算法-桶排序算法详解
- 十大经典排序算法-基数排序算法详解
一、什么是插入排序
1.概念
插入排序(Insertion Sort)是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入
2.算法原理
这是一个无序数列:1、5、4、2、6、3,我们要将它按从小到大排序。按照插入排序的思想,我们先指定有序序列,再将无序序列插入有序序列的相应位置![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZPRLqP9g-1591253090646)(./冒泡1.png)]](https://i-blog.csdnimg.cn/blog_migrate/91f9b02f2fc4e165f7c4bcbee229b10e.png)
将第一个元素1作为有序数据,此时有序区只有一个元素![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b3CI1kLY-1591253090655)(./插入1.png)]](https://i-blog.csdnimg.cn/blog_migrate/5de8eadb095801807646c8429255b0fa.png)
第一轮,让元素5和有序区依次比较,1<5,无需交换
此时有序区有1、5两个元素![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r2ZDC8xw-1591253090657)(./插入2.png)]](https://i-blog.csdnimg.cn/blog_migrate/3b59882f9bb49ffb40bf22e60c625d35.png)
第二轮,让元素4和有序区依次比较,5>4,需要交换![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zv10Y9Lz-1591253090658)(./插入3.png)]](https://i-blog.csdnimg.cn/blog_migrate/86bc208abc72dafd1cd0f1d71cddb81c.png)
1<4,1与4不需要交换
此时有序区有1、4、5三个元素![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vKkC47BC-1591253090659)(./插入4.png)]](https://i-blog.csdnimg.cn/blog_migrate/c67ca5fb721f4b216074f329bd673ef9.png)
第三轮结束后,如下所示![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aE1u0x0q-1591253090661)(./插入5.png)]](https://i-blog.csdnimg.cn/blog_migrate/85c09387d77b4708df4602e67d5d5295.png)
第四轮结束后,如下所示![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S8j1MelA-1591253090662)(./插入6.png)]](https://i-blog.csdnimg.cn/blog_migrate/cbe83f44b45f4871a92478ce8ddc517f.png)
第五轮结束后,如下所示![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q3aigJm0-1591253090664)(./插入7.png)]](https://i-blog.csdnimg.cn/blog_migrate/3cc48fb2b203a8782e88ccccb1796f15.png)
至此所有的元素都是有序的
3.算法优化
在第三轮中,2先跟5交换,再跟4交换,进行了多次交换,在数组数量大的时候,交换的次数会更多![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5oiYukgA-1591253090665)(./插入8.png)]](https://i-blog.csdnimg.cn/blog_migrate/8774f1422367a5d389fdcd15abb4f870.png)
实际上,我们可以先将2暂存起来,把有序区的元素从左向右复制,优化如下:
第一步,将2暂存起来![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hP8oLnBQ-1591253090666)(./插入9.png)]](https://i-blog.csdnimg.cn/blog_migrate/389d0ac7acaa4aa731ead1ceb9cbea1e.png)
第二步,2和5比较,2<5,5移到下一个位置![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GfiCwLRH-1591253090668)(./插入10.png)]](https://i-blog.csdnimg.cn/blog_migrate/1b8893f3f734283e99f5f143abf5841f.png)
第三步,2和4比较,2<4,4移到下一个位置![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HmDL89k3-1591253090669)(./插入11.png)]](https://i-blog.csdnimg.cn/blog_migrate/84ceda9185821ad5b25628ff03ac9afe.png)
第四步,2和1比较,2>1,1不需要移动,将暂存的2复制到1的下一个位置![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Psr9b5Wd-1591253090670)(./插入12.png)]](https://i-blog.csdnimg.cn/blog_migrate/fc727e9d1d203df6a9c7efa16906c349.png)
4.算法实现
function sort(arr) {
let length = arr.length;
for (let i = 1; i < length; i++) {
let insertValue = arr[i];
let j = i - 1;
for (; j >= 0 & insertValue < arr[j]; j--) {
arr[j + 1] = arr[j];
}
arr[j + 1] = insertValue;
}
}
let arr = [1, 5, 4, 2, 6, 3];
sort(arr);
console.log(arr);
二、插入排序算法特点
1.时间复杂度
插入排序算法要进行n-1轮,每一轮对比的元素最坏的情况依次是1, 2, 3 … n-1,所以时间复杂度是O(N^2)
2.空间复杂度
插入排序算法排序过程中需要一个临时变量存储插入元素,所需要的额外空间为1,因此空间复杂度为O(1)
3.稳定性
插入排序算法在排序过程中,无序数列插入到有序区的过程中,不会改变相同元素的前后顺序,是一种稳定排序算法
更多推荐



所有评论(0)