软考:排序

该文章是关于数据结构部分排序的总结,包括各种排序方法的时间和空间复杂度的分析,主要从直接插入、交换(冒泡、快速)、选择(直接选择、堆排序)和归并四类来分析。

直接插入:

依次将每个记录插入到一个已排好序的有序表中,从而得到一个新的、记录数增加1的有序表。具体:插入第i个记录时,前i-1已经排好序,此时将第i个记录的关键字和第i-1,i-2比较,从而找到插入位置插入位置及其后记录依次向后移动。

举例:9  6 15 8 11

复杂度: 直接插入最好情况下每趟只需做一次比较且不用移动元素,因此n个元素总比较次数n-1,总移动0次;最坏情况下进行第j趟排序时与前面每个记录都有比较,双重循环,此时是关于n^2的式子;又排序过程中仅需一个元素的辅助空间,空间复杂度O(1),且是稳定排序。

交换:

冒泡:首先将第一个记录键值和第二个记录键值比较,如果R[1].key>R[2].key,则交换,然后继续比较第二个和第三个,比较n-1次后完成最大记录在n的位置,此为第一趟起泡;然后进行第二次起泡完成最大记录在n-1位置,重复此过程直至没有进行记录交换的操作时结束。

举例:9  6 15 8 11

冒泡排序最理想情况,一组排序好的序列,只需比较n-1次,完成一次起泡即可,时间复杂度为O(n),最坏情况,一为n个元素逆序列,每趟比较次数为n-1,n-2…1,所以O(n^2);排序过程仅需一个元素的辅助空间用于元素交换,空间复杂度O(1),且是稳定排序。

快速:通过一趟排序将待排序记录分为独立两部分,其中一部分记录关键字不小于另一部分关键字,然后再对两部分继续快速排序。做法:附设两指针i和j,初值分别指向第一个记录和最后一个记录,通常假设第一个记录值作为关键字key,首先从j所指位置向前搜索,找到第一个关键字小于key的记录并与之交换,然后从i所指位置向后搜索,找到第一个关键字大于key的记录并与之交换,重复这两步直至i与j相等。

选取第一个记录9为关键字,完成第一趟排序后,再对9左右两部分快速排。

时间复杂度:通过主定理:T [n] =
aT[n/b] + f (n),其中 a >= 1 and b> 1 是常量 并且 f(n) 是一个渐近正函数, 为了使用这个主定理,您需要考虑下列三种情况:

快速排序的每一次划分把一个 问题分解成两个子问题,其中的关系可以用下式表示:T[n] = 2T[n/2] +O(n) 其中O(n)为PARTITION()的时间复杂度,对比主定理, T [n] =aT[n/b] + f
(n),我们的快速排序中:a = 2, b =2, f(n) = O(n)

选择:

直接选择:在第i次选择操作中,通过n-i次键值比较,从n-i+1个记录中选择键值最小的记录,并和第i(I<=i<=n-1)个记录交换。

举例:9  6 15 8 11

复杂度分析:直接选择包含两层嵌套for循环,时间复杂度为O(n^2),且是不稳定的。

堆排序:对一组待排序记录建立初始堆(建堆过程:将待排序关键字放到一课完全二叉树各个结点中,从n/2开始筛选,逐步把n/2-1,n/2-2…1为根的子树筛选成堆)排序过程中先和最后一个结点比较,每比较交换一次都有重新建堆,直至完成前两个结点的比较,基于最小堆的堆排序输出由大到小的序列。

举例:9  6 15 8 11

放在一棵二叉树中为:

建堆:从n/2即第二个结点6开始筛选,然后筛选第一个结点,建好堆如下:

堆排序过程:堆顶元素6和最后结点11比较,交换,重新构建堆:

然后堆顶元素8和倒数第二个结点比较,交换之后重新构建堆,直至前两个结点比较交换后结束。

时间复杂度:包括筛选和堆比较两部分。那么要执行多少次筛选呢?每一次筛选根结点都往下沉,所以筛选次数不会超过完全二叉树的深度:([log2n]向下取整+1),其中n为结点个数,2为底数,即时间复杂度为O(log2n),堆比较是堆顶结点和最后一个结点开始比直至第二个结点,呈线性,所以为O(n),所以时间复杂度O(nlog2n)。

归并(以二路归并来说):反复讲两个有序文件归并呈一个有序文件的排序方法。

举例:9  6 15 8 11

时间复杂度O(nlog2n),且是稳定的。关于时间复杂度分析不是很理解,欢迎交流。

参考:快速排序复杂度分析归并排序复杂度分析

时间: 2024-10-09 23:03:32

软考:排序的相关文章

我的软考之路(六)——数据结构与算法(4)之八大排序

排序是编程的基础,在程序中会常常使用,好的排序方法能够帮助你提高程序执行的效率,所以学好排序,打好基础,对于程序的优化会手到擒来.不管你的技术多么强,假设没有基础也强不到哪去. 不多说了,我们直接进入今天的主题. 总有人说排序非常难,可是我总认为非常easy,我们仅仅须要了解基本思想就好了,通过简单的样例来加深理解. 1.直接插入排序 (1)简单介绍:直接插入排序,从字面意思能够看出,直接插入数据完毕排序. (2)基本思想:在插入第i个数时,如果前i-1数已经排好序了,仅仅须要将第i个数插入到i

软考(3)--数据结构导论

数据结构不仅是软考的内容,也是这次自考的内容,重要性不言而喻.前后看了很多遍,每次看都有不同的感受.看第一遍的时候被开篇的复杂度问题给了一个下马威,不过硬着头皮看下去了,画完一遍导图以后,再看第二遍,已经觉得明晰多了.到现在把整本<数据结构导论>了然于胸,真的觉得学习就是一个反复的过程,反复的强化,增加联系,编织知识网.书本上的知识在逐渐抽象.总结中成为自己的知识. 数据结构导论主要讲了两方面的内容,数据的结构以及对数据操作.一张图胜过千言万语,直接上图了! 数据结构导论从逻辑结构和存储结构两

数据结构——软考探究(一)

继上篇博客之后,对软考涉及的知识有了更深入的研究,本篇博客将会和大家分享对于数据结构的学习.数据结构是软考中比较重要的一块知识,它介绍了计算机中数据的内部构成,即一个数据由那些成分数据构成,以什么方式构成,呈什么结构.对于我们对于计算机知识的深入研究有很好的帮助,同时以此为基础也会很好地帮助我们去挖掘计算机的潜能,实现各方面性能的最优化. 对于数据结构的知识,自己总结了以下的框图: 数据结构是计算机中我们时常会涉及到的基础知识,他对于我们来说是非常重要的,诸如线性表.栈.队列.树图以及各种排序算

我的软考之路(七)——数据结构与算法(5)之查找

上篇博文我重点介绍了八大内部排序,这篇博文(数据结构与算法的最后一课)重点介绍查找,我们依旧沿用上篇博文的风格,先简单介绍,再以例子重点讲解. 下面我们开始今天的旅行,首先祝你旅行愉快,呵呵. 静态查找 若查找目的是为了查询某个特定的数据是否在表中或检索某个特定数据的各种属性,则此类查找表为静态查找表. 1.顺序查找 基本原理:从表一端开始逐个和关键字进行比较,若找到一个记录和给定值相等,则查找成功,反之失败.再简单点就是,一个一个的比大小,看看是否相等. 例子: 顺序查找更适合于顺序存储结构和

软考中级笔记

9大管理总复习 5大过程组 范围管理 1)      范围管理的过程和各自的工具是什么? 2)     产品范围包含(产品规格),( 性能技术指标)的描述. 3)     项目范围是否完成以什么为衡量标准. 以项目管理计划,项目范围说明书,WBS,以及WBS字典作为衡量标准. 要基于项目管理计划来度量 4)     WBS的表示形式是什么?各有什么优缺点? 树型和列表形式. 优点 缺点 树型 层次清晰,非常直观,结构性强 不容易修改,对于大的复杂的项目很难表示出项目的全景.一般应用在中小型项目中

考试备战系列--软考--02基础知识复习

这部分主要是计算机基础知识的概念介绍,相关系列文章如下所示. 考试备战系列--软考--01基础架构概念 考试备战系列--软考--02基础知识复习 考试备战系列--软考--03综合知识复习 考试备战系列--软考--04考题收集 考试备战系列--软考--05案例收集 考试备战系列--软考--06论文准备 操作系统时计算机系统的核心系统软件,其他软件均建立在其上,其分类包括:单用户操作系统和批处理操作系统.分时操作系统和实时操作系统.网络操作系统和分布式操作系统.嵌入式操作系统.其4大特征为并发性.共

我的软考之路(九)——总结篇

经过两个月的备战,软考总算结束了.软考虽然结束了,但是还需要简单的总结一下得与失.我从时间安排,到讲课做真题简单的回顾一下软考的整个过程. 时间安排: 对于时间的安排,整个小组成员每个人都有自己的看法,我就不在这里吐槽了.对于我来说,时间安排有点仓促,看书的时间是拿晚上的休息时间补过来的.看书让我将课本的概念性的知识简单的过了一遍,即补充了当初学习的不足,也恶补一下基本知识,不管对于软考,还是对于后面的继续学习都是有帮助的. 时间安排,没有什么合理与不合理.以松散的状态完成一项任务的时间是合理的

软考类----来自淘米2004实习生笔试

淘米2014实习生笔试,今年是淘米第一年招暑期实习生,笔试好大部分考的是软考的题目啊啊啊啊(劳资后悔当年没考软考刷加权),其他是浅而泛的风格,C++,SQL语句,数据结构(哈夫曼树,二叉查找树,栈后缀表达式,连通无向图),排序算法各种最优最差平均 复杂度-- 下面记一下考到的软考风格的题目,不过估计其他家也不会考(劳资什么时候能过个笔试额,锁定C++不搞JS了) 1.计算机中最适合进行数字加减运算的编码是_补码__,最适合表示浮点数的数字编码是_移码__. A.原码 B.反码 C.补码 D.移码

软考倒计时21天:9大管理工具技术

整体管理 项目启动 编制项目范围说明书 制定项目管理计划 指导和管理项目执行 监督和管理项目 整体变更控制 项目收尾 项目管理方法论 项目管理信息系统 专家判断 项目管理方法论 项目管理信息系统 专家判断 项目管理方法论 项目管理详细系统 专家判断 项目管理方法论 项目管理信息系统 项目管理方法论 项目管理信息系统 专家判断 挣值管理 项目管理方法论 项目管理信息系统 专家判断 项目管理方法论 项目管理信息系统 专家判断 范围管理 编制范围管理计划 范围定义 创建工作分解结构 范围确认 范围控制

我的软考之路(五)——数据结构与算法(3)之图

图跟树一样,也是非线性结构,咋看起来有点复杂,其实它很简单.树具有层次关系,上层元素可以与下一个多个元素连接,但是只能和上层的一个元素连接.在图结构中,节点间的连接是任意的,任何一个元素都可以与其他元素连接. 图相对而言很简单,我们只介绍的图的遍历和最小生成树,现在我们开始. 遍历 1.概念 从图中某一个顶点出发,访问图中的每一个结点,并要求只能访问一次,不能重复访问. 2.方法 (1)广度优先遍历 基本思想:首先访问顶点,再访问顶点的全部未访问的邻结点,再访问邻结点的所有结点即可(类似树的层次