| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【八大排序①】插入排序(直接插入排序、希尔排序) -> 正文阅读 |
|
[数据结构与算法]【八大排序①】插入排序(直接插入排序、希尔排序) |
目录 一、直接插入排序(Straight Insertion Sort) 说在前面关于排序,相信大家一定不陌生,在生活中我们见过许多排序,比如在购物网站搜索时,有根据价格排序、根据好评度排序、根据销量排序,我们根据关键字使内容具有一定的顺序,这便是排序。
排序主要为 基于比较的排序 和 不基于比较的排序 ? 上图的7中排序都是基于比较的排序 一、直接插入排序(Straight Insertion Sort)把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。实际中我们玩扑克牌时,就用了插入排序的思想。 直接插入排序的算法思想
我们用一张图来领略一下直接插入排序算法的思想 具体编写代码时?我们定义一个 i 和 j,将数组按升序排序,现在我们搭配着图来看代码 如图所示就是大概执行流程??
【直接插入排序的特性总结】?直接插入排序的复杂度分析
直接插入排序的稳定性分析是稳定的 我们发现 ?这里如果是 >= ,那么就是不稳定的 为什么说它的实质是稳定的呢? 如果本身就是一个稳定的排序,我们可以把它实现为不稳定的排序 但如果本身不是一个稳定的排序,那么就不可能变成稳定的排序 直接插入排序的使用场景
二、希尔排序(Shell Sort)引言:我们知道,优秀排序算法的首要条件就是速度,人们想了许多办法来提高排序的速度,在很长的时间里,众人发现尽管各种排序算法花样繁多,但时间复杂度都是O(n^2),但终于有一天希尔排序诞生了,希尔排序是D.L.Shell于1959年提出来的一种排序算法,是突破O(n^2)这个时间复杂度的第一批算法之一 希尔排序法又称缩小增量法。 希尔排序法的基本思想
?我们怎么通过代码实现呢,需要定义一个 i 和 j??
?希尔排序的特性总结:
代码实现
【希尔排序的特性总结】希尔排序的复杂度?
? ?由于gap的取法有多种,所以希尔排序的时间复杂度并不能确定,最初Shell提出取gap=n/2,gap =gap/2,直到 gop =1,后来Knuth 提出取gap =(gop/3)+1。还有人提出都取奇数为好,也有人提出各gap互质为好。无论哪一种主张都没有得到证明 ? 迄今为止还没有人找到一种最好的增量序列,需要注意的是,增量序列的最后一个增量值必须等于1才行? ?因为我们的gap是按照Knuth提出的方式取值的,而且Knuth进行了大量的试验统计,我们暂时就按照 ?来计算时间复杂度
希尔排序的稳定性是不稳定的 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 23:26:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |