| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 排序1:直接插入排序 -> 正文阅读 |
|
[数据结构与算法]排序1:直接插入排序 |
??很久没有写博客了,最近打算完整的写一个专题关于数据结构中排序算法的内容?? ? ? ? ? ? 这一期我们来剖析一下直接插入排序的底层逻辑和代码实现。 目录
把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。 这一点就类似于我们打扑克的时候把一张牌插入到其他牌的前面。
?一口气吃不成一个大胖子,想要实现整个排序,我们应该来先实现单轮排序。 逻辑大致可分为以下: ? ? ? ? 1、从后往前遍历。 ? ? ? ? 2、比较后一个与前一个的大小。 ? ? ? ? 3、a:如果后面的数要小于前面的数,那么小的数插入到前面,然后被插入位置的后面的数字整体往后移动一格。 其单轮的代码如下:
? ? ?从后往前遍历我们由end来实现,end递减,实现了从后往前。然后比较下标为end和下标为end+1位置的大小,再考虑是否插入移动。
我们知道,n个数字实际上只需要排n-1轮就行了,因为如果排完了n-1个数字,剩下的一个肯定也归位了。另外,如果循环次数设置为n次,那么最后一次如果与后面的比较,就会发生越界。 综上,我们代码实现如下:
接下来,我们放一个乱序的数组进行测试:
最终排成了由小到大的数: 总结:
直接插入排序的特性总结:
1.
元素集合越接近有序,直接插入排序算法的时间效率越高
2.
时间复杂度:
O(N^2)
3.
空间复杂度:
O(1)
,它是一种稳定的排序算法
4.
稳定性:稳定
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 19:53:40- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |