啃下大骨头——排序(三)
文章目录
- 3.排序算法复杂度及稳定性分析
- 4.选择题练习
- 1. 快速排序算法是基于( )的一个排序算法。
- 2.对记录(54,38,96,23,15,72,60,45,83)进行从小到大的直接插入排序时,当把第8个记录45插入到有序表时,为找到插入位置需比较( )次?(采用从后往前比较)
- 3.以下排序方式中占用O(n)辅助存储空间的是
- 4.下列排序算法中稳定且时间复杂度为O(n2)的是( )
- 5.关于排序,下面说法不正确的是
- 6.下列排序法中,最坏情况下时间复杂度最小的是( )
- 7.设一组初始记录关键字序列为(65,56,72,99,86,25,34,66),则以第一个关键字65为基准而得到的一趟快速排序结果是()
- 8.在待排序数据已有序时,花费时间反而最多的是( )排序。
- 9.下面的排序算法中,初始数据集的排列顺序对算法的性能无影响的有( )
3.排序算法复杂度及稳定性分析
稳定性
:
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的
例子:
6 3 5 4 5 9 1
两个相同的值,如果排序之后红色的5依旧在蓝色的5前面,就是保证相对顺序不变,这就是稳定。
但稳定性只有在整型排序结构体中是有意义的
时间最坏 | 时间最好 | 空间 | 稳定性 | |
---|---|---|---|---|
直接插入排序 | O(N^2) | O(N) | O(1) | √ |
希尔排序 | 平均:O(N^1.3) | 平均:O(N^1.3) | O(1) | × |
选择排序 | O(N^2) | O(N^2) | O(1) | × |
堆排序 | O(N*logN) | O(N*logN) | O(1) | × |
冒泡排序 | O(N^2) | O(N) | O(1) | √ |
快速排序 | O(N^2) | O(N*logN) | O(logN) | × |
归并排序 | O(N*logN) | O(N*logN) | O(1) | √ |
希尔排序为什么不稳定
?
因为预排的时候,相同的数据可能会被分到不同组里面去了
内部排序:数据元素全部放在内存中的排序。(以上说过的排序方法)
外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。(硬盘中)
归并不需要占用内存
4.选择题练习
1. 快速排序算法是基于( )的一个排序算法。
A分治法
B贪心法
C递归法
D动态规划法
将区间按照基准值划分为左右两半部分,然后再进行排序。所以是分而治之。
2.对记录(54,38,96,23,15,72,60,45,83)进行从小到大的直接插入排序时,当把第8个记录45插入到有序表时,为找到插入位置需比较( )次?(采用从后往前比较)
A 3
B 4
C 5
D 6
用直接插入的思想写一下思路,一开始没排到的数就先不写出来,以免混淆
38 54
38 54 96
23 38 54 96
15 23 38 54 96
15 23 38 54 72 96
15 23 38 54 60 72 96 此时45需要和这五个数进行对比,最后才发现比38大,比54小所以插入38与54之间
3.以下排序方式中占用O(n)辅助存储空间的是
A 简单排序
B 快速排序
C 堆排序
D 归并排序
需要先malloc一个第三方区间进行归并,之后会进行释放
4.下列排序算法中稳定且时间复杂度为O(n2)的是( )
A 快速排序
B 冒泡排序
C 直接选择排序
D 归并排序
还有直接插入排序
5.关于排序,下面说法不正确的是
A 快排时间复杂度为O(N*logN),空间复杂度为O(logN)
B 归并排序是一种稳定的排序,堆排序和快排均不稳定
C 序列基本有序时,快排退化成冒泡排序,直接插入排序最快
D 归并排序空间复杂度为O(N), 堆排序空间复杂度的为O(logN)
两个都应该是O(N^logN)
6.下列排序法中,最坏情况下时间复杂度最小的是( )
A 堆排序
B 快速排序
C 希尔排序
D 冒泡排序
堆排序 O(NlogN)
快速排序O(N^2)
希尔排序O(N1.3)
冒泡排序O(N^2)
7.设一组初始记录关键字序列为(65,56,72,99,86,25,34,66),则以第一个关键字65为基准而得到的一趟快速排序结果是()
A 34,56,25,65,86,99,72,66
B 25,34,56,65,99,86,72,66
C 34,56,25,65,66,99,86,72
D 34,56,25,65,99,86,72,66
8.在待排序数据已有序时,花费时间反而最多的是( )排序。
A.堆排序
B.归并排序
C.希尔排序
D.快速排序
次序列接近有序,所以如果是插入排序,时间复杂度逼近O(n)
快排: 逼近O(n^2)
归并和堆排仍然是nlogn
9.下面的排序算法中,初始数据集的排列顺序对算法的性能无影响的有( )
① 快速排序
② 希尔怕徐
③ 插入排序
④ 堆排序
⑤ 归并排序
⑥ 选择排序
A.①④⑤
B.④⑤⑥
C.②③⑥
D.②③⑤⑥
快排
: 初始顺序影响较大,有序是,性能最差
插入
: 接近有序,性能最好
希尔
:希尔是对插入排序的优化,这种优化是在无序的序列中才有明显的效果,如果序列接近有序,反而是插入最优。
堆排,归并,选择
对初始顺序不敏感
啃下大骨头——排序(三)相关推荐
- 啃下大骨头——排序(二)
文章目录 2.3 交换排序 2.3.1冒泡排序 2.3.2 快速排序 2.3.2 快速排序优化 2.3.2 快速排序非递归 2.4 归并排序 2.5 非比较排序 2.3 交换排序 基本思想:所谓交换, ...
- 啃Docker大骨头所必备的基础理论
啃Docker大骨头所必备的基础理论 前言 一:Docker概述 1.1:Docker是什么? 1.2:Docker的使用场景 1.3:Docker容器与传统虚拟机的比较 1.4:Docker引擎(D ...
- 在AI创新赛道啃下最硬的骨头:中科凡语抢滩NLP蓝海
文丨智能相对论 作者丨叶远风 自然语言处理(NLP),人工智能皇冠上的"明珠",由于各个底层算法和技术模块都与业务场景的业务逻辑.数据特点高度捆绑,每一个领域.每一个业务场景都需要 ...
- 十大经典排序算法(下)
请查看相关文章:十大经典排序算法(上) 快速排序(Quick Sort) 快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分 ...
- 啃下这三块最难啃的硬骨头,你将在嵌入式C语言中大放异彩
啃下这三块最难啃的硬骨头,你将在嵌入式C语言中大放异彩 C语言在嵌入式学习中是必备的知识,审核大部分操作都要围绕C语言进行,而其中有三块"难啃的硬骨头"几乎是公认级别的. ///插 ...
- 《spark技术应用》课程期末考试大作业报告,使用eclipse完成求top值、文件排序、二次排序三个程序的个性化开发。
目录 一.选题的目的及要求... 4 二.设计思路... 4 三.主要内容及关键技术.. 5 四.制作步骤... 5 1.准备工作... 5 1.1在VMware中安装一台Ubuntu64位系 ...
- 十大经典排序算法详解(三)-堆排序,计数排序,桶排序,基数排序
养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 十大经典排序算法-堆排序,计数排序,桶排序,基数排序 前言 这是十大经典排序算法详解的最后一篇了. ...
- Nwafu-OJ-1411 Problem J C语言实习题二——5.按从大到小排序三个数
问题 J: C语言实习题二--5.按从大到小排序三个数 时间限制: 1 Sec 内存限制: 128 MB 题目描述 从键盘输入三个数,将它们按从大到小进行排序,然后输出. 输入 输入三个数. 输出 ...
- 十大经典排序算法动画与解析,看我就够了
作者 | 程序员小吴 转载自五分钟学算法(ID: CXYxiaowu) 排序算法是<数据结构与算法>中最基本的算法之一. 排序算法可以分为内部排序和外部排序.内部排序是数据记录在内存中进行 ...
最新文章
- 信号与系统2021年期末考试命题
- java正则表达式所有字符串_java正则表达式获取字符串中所有匹配的内容
- open pwrite
- JZOJ5944信标
- 网络基础2-3(TCP协议,三次握手,四次挥手,TIME_WAIT状态的作用,TCP如何保证可靠传输,TCP连接中状态转化,滑动窗口,流量控制,快速重传,拥塞窗口,延迟应答,捎带应答,粘包问题)
- matlab时域转换成频域_从时域到频域,你只需要旋转一下!
- 2018.09.28python学习第十三天part2
- Java工作笔记-AJAX实现整体不变,局部更新(与整体刷新比较)
- php增加mysql索引_mysql怎么添加索引
- 麦吉尔大学 计算机科学和阿尔伯特,阿尔伯特大学怎么样?
- python界面-python 可视化界面
- gsonformat java代码_GSONFormat的简单使用
- 关于FTP的两种连接模式
- THREE.JS 导入STL格式的模型
- 内网DNS重要使用作用
- python使用pip
- 聊聊另外一个Druid(很全)
- 王者服务器维护8月四日,王者荣耀体验服弈星重做上线 8月4日停机更新
- matlab 电压矢量开关,解析电压空间矢量研究及Matlab仿真
- 航海世纪服务器维护中,航海世纪2月28日例行维护公告
热门文章
- 进来学习,这个拿墨刀产品素材设计大赛万元大奖的原型设计超强
- 2019年大概率成为新零售的“前置仓”年
- 【Vue】动态添加组件的两种实现
- 2022中国大学python语言程序设计测试五答案(北理工嵩天 、黄天羽 、礼欣)
- LCP创建bond接口
- 6个可以改变一生的宝藏APP,他坚持学习了3年,如今月薪涨到5万
- 单选框使用removeAttr清除选中状态后再使用attr无法赋予选中状态
- 2022虎年姓氏头像微信小程序源码+文字变音+喝酒娱乐多功能小程序源码
- 模型部署——融合BN和Conv层
- 第九讲:工厂管理流程 (生管部)(转载)