| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 插入、希尔与选择排序 -> 正文阅读 |
|
[数据结构与算法]插入、希尔与选择排序 |
目录前言排序在现实生活中无处不在,比如说在某app购物,在搜索到某一商品后,上面的选项有默认排序、按销量排序和按价格排序等等,有了这些排序就可以很方便与快速地让用户找到想要的某一商品,所以排序很重要且无处没有排序。 1. 排序的概念和应用1.1 概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。 内部排序:数据元素全部放在内存中的排序。 外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。 1.2 应用最常见的就是购物了。 1.3 常见的排序2. 排序算法及实现
2.1 直接插入排序2.1.1基本思想直接插入排序是一种简单的插入排序法,其基本思想是: 实际中我们玩扑克牌时,就用了插入排序的思想。
2.1.2 代码实现
时间复杂度最坏的情况:O(N2) – 逆序 2.1.3 特性总结直接插入排序的特性总结:
2.2 希尔排序直接插入排序的时间复杂度是N2,数据量大就不行了,因此希尔就根据直接插入排序的思想进行了进一步优化提出了接下来介绍的希尔排序。 2.2.1 基本思想希尔排序法又称缩小增量法。 希尔排序法的基本思想是:先选定一个整数gap,把待排序数组中所有数据分个组,所有距离差为gap的看作一组,每组进行直接插入排序,只不过跳跃的距离会随着gap的变化而变化,这样的目的是让为了数组接近有序,然后不断缩小gap继续排序,直到让gap为1,当gap=1时,此时的数组已经接近于有序了,然后就相当于整体直接插入排序了。
直接插入排序每次交换向前跳一个位置,而希尔排序每次交换会跳gap个位置,因此,当gap越大,越大的数据就会越快地跳到后面,同样的小的数据就会越快的跳到前面。gap越小,跳的越慢但是整体会更接近有序。 代码实现完后来测试两个排序的效率。 2.2.2 代码实现
2.2.3 🚀插入 VS 希尔效率对比:
2.2.4 特性总结
2.3 选择排序每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。
2.3.1基本思想在元素集合array[i]–array[n-1]中选择关键码最大(小)的数据元素。
2.3.2代码实现在实现的时候可以稍微优化一下:遍历一次可以同时选出最大的和最小的两个数,最小的放左边,最大的放右边。
很明显这是一个O(N2)的排序,并且最好的情况下也是O(N2),因为数组中的数据无论什么状态都不会影响到它,不管是否有序都要遍历一遍,可以说是最烂的排序之一。 2.3.3 特性总结直接选择排序的特性总结:
3. 冒泡、插入与选择排序测试到目前为止学到过时间复杂度为O(N2)的排序有如上三种,那么三种的复杂度相等,效率也相等吗?接下来就来比较一下三个排序的效率,看看哪个效率最高。
开始比较: 相比较而言,直接插入排序的效率是最高的,也可以说插入排序是在O(N2)中很不错的排序算法了。 总结本文主要介绍了几个简单排序,后面还有快速排序和归并排序等更优秀的排序等着。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年12日历 | -2024/12/28 18:50:15- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |