上
次参加了一个公司的笔试,其中有一道题是:写出快速排序的原理,并要求写出代码。而自己当时只写出了原理,但没能写出代码,回来就开始研究各种排序的
Java实现,发现其中有许多的难点,记得当年学习数据结构的时候还自认为自己学得还可以,当我看到快速排序的时候才发现,原来自己真的很菜,连原理都说
错了,于是学习ing。
1
)分类:
1
)插入排序(直接插入排序、希尔排序)
2
)交换排序(冒泡排序、快速排序)
3
)选择排序(直接选择排序、堆排序)
4
)归并排序
5
)分配排序(箱排序、基数排序)
所需辅助空间最多:归并排序
所需辅助空间最少:堆排序
平均速度最快:快速排序
不稳定:快速排序,希尔排序,堆排序。
2)
选择排序算法的时候
1.
数据的规模; 2.数据的类型 ; 3.数据已有的顺序
一般来说,当数据规模较小时,应选择直接插入排序或冒泡排序。任何排序算法在数据量小时基本体现不出来差距。
考虑数据的类型,比如如果全部是正整数,那么考虑使用桶排序为最优。 考虑数据已有顺序,快排是一种不稳定的排序(当然可以改进),对于大部分排好的数
据,快排会浪费大量不必要的步骤。数据量极小,而起已经基本排好序,冒泡是最佳选择。我们说快排好,是指大量随机数据下,快排效果最理想。而不是所有情
况。
3
)总结:
——按平均的时间性能来分
:
1
)时间复杂度为O(nlogn)的方法有:快速排序、堆排序和归并排序,其中以快速排序为最好;
2
)时间复杂度为O(n2)的有:直接插入排序、起泡排序和简单选择排序,其中以直接插入为最好,特
别是对那些对关键字近似有序的记录序列尤为如此;
3
)时间复杂度为O(n)的排序方法只有,基数排序。
当待排记录序列按关键字顺序有序时,直接插入排序和起泡排序能达到O(n)的时间复杂度;而对于快速排序而言,这是最不好的情况,此时的时间性能蜕化为O(n2),因此是应该尽量避免的情况。简单选择排序、堆排序和归并排序的时间性能不随记录序列中关键字的分布而改变。
——按平均的空间性能来分
(指的是排序过程中所需的辅助空间大小):
1
) 所有的简单排序方法(包括:直接插入、起泡和简单选择)和堆排序的空间复杂度为O(1);
2
) 快速排序为O(logn
),为栈所需的辅助空间;
3
) 归并排序所需辅助空间最多,其空间复杂度为O(n
);
4
)链式基数排序需附设队列首尾指针,则空间复杂度为O(rd
)。
——排序方法的稳定性能:
1
) 稳定的排序方法指的是,对于两个关键字相等的记录,它们在序列中的相对位置,在排序之前和
经过排序之后,没有改变。
2
) 当对多关键字的记录序列进行LSD方法排序时,必须采用稳定的排序方法。
3
) 对于不稳定的排序方法,只要能举出一个实例说明即可。
4
) 快速排序,希尔排序和堆排序是不稳定的排序方法。
分享到:
相关推荐
### 排序算法综述 #### 一、排序的基本概念 **排序**是一种常见的数据组织方式,其目的是将一组记录按关键字(Key)的升序或降序排列。记录是文件的基本单位,由一个或多个数据项组成,其中用于排序的数据项被称为...
排序算法综述 排列算法是计算机科学中的一种基本算法,用于对数据进行排序。常见的排序算法有八种,即选择排序、冒泡排序、插入排序、归并排序、快速排序、堆排序、.radix 排序和基数排序。 一、分类 内部排序和...
### 基于静态电压稳定的事故筛选和排序算法综述 #### 一、引言 在当前电力系统中,随着负荷需求的快速增长以及市场机制下的频繁运行方式调整,电力网络面临着越来越大的挑战,特别是电网接近稳定极限运行的问题日...
### 搜索引擎页面排序算法研究综述 #### 一、引言 随着互联网技术的快速发展,网络信息量呈指数级增长。据统计,互联网上的网页数量几乎每隔一年就会翻一番。在这种背景下,如何从海量信息中高效精准地获取所需...
第三部分“排序”(第6~11章)按章节顺序分别讨论基本排序方法(如选择排序、插入排序、冒泡排序、希尔排序等)、快速排序方法、归并和归并排序方法、优先队列与堆排序方法、基数排序方法以及特殊用途的排序方法,...
《C语言实现的数据结构排序综述》 在编程领域,数据结构与算法是核心部分,它们直接影响程序的效率和性能。本文将详细讨论一个基于C语言实现的数据结构排序程序,涵盖了多种排序算法,包括希尔排序、选择排序、插入...
### Google集群系统技术综述 #### 一、引言 Google作为全球领先的搜索引擎之一,以其卓越的搜索技术和高效的用户体验著称。为了实现快速且精准的搜索结果反馈,Google利用了大量的低成本计算机集群构建了一套高...
人脸识别的基本思路是将图像视为高维空间中的点,通过找到一个低维子空间,使得图像在这个子空间内的投影仍能保留大部分信息,从而简化识别过程。 PCA算法的实现过程分为以下步骤: 1. **数据预处理**:首先,收集...
《对比监督学习》2020综述论文深入探讨了自我监督学习的最新进展,特别是对比学习在计算机视觉、自然语言处理(NLP)等领域的重要角色。对比学习是一种自我监督学习的方法,它通过构建相似样本的近似表示并区分不同...
NoSQL非关系型数据库因其在处理大规模数据集和提供高性能方面的优势,已经成为现代Web应用程序的重要组成部分。尽管它们在某些方面不如关系型数据库成熟,但随着技术的发展和完善,NoSQL数据库正在逐步克服这些局限...
搜索引擎排序算法是搜索引擎中最重要的组成部分之一,它直接影响搜索结果的质量和用户体验。随着互联网信息的爆炸式增长,搜索引擎已经成为我们日常生活中的重要工具。但是,如何在海量信息中快速准确地找到我们想要...
### Collections Framework中的算法综述 #### 一、引言 在Java编程中,`java.util.Collections` 和 `java.util.Arrays` 是两个极为重要的类,它们为处理数据结构提供了丰富的工具和算法支持。本文旨在深入探讨Java...
主题的选择可以很广泛,从一个大的领域到一个具体的技术或理论都可以作为文献综述的切入点。选题确定之后,接下来的工作就是搜集相关文献。搜集文献的方法多种多样,包括检索法、浏览法、滚雪球法等。其中,检索法因...
例如目前许多国际著名的计算机公司所举办的各种认证考试绝大部分采用这种方式。 三、论题的研究现状及其发展评述 在线考试是现阶段研究开发的一个热点。它是建立在国际互联网上的应用系统,客户端的配置可以极为简单...
3. **数据库管理**:这部分可能涵盖关系型数据库的基本概念,如SQL语言、数据库设计(ER模型)、事务处理和并发控制,以及NoSQL数据库和大数据处理技术的介绍。 4. **网络技术**:网络协议(如TCP/IP)、网络架构、...
文献综述是学术研究的重要部分,它涵盖了对特定主题的已有研究成果的全面分析和总结。在答辩报告中,这部分展示了作者对所研究领域的理解深度和广度。在模板中,用户可以找到如何组织和展示文献资料的示例,如按时间...
在摄像机静止的情况下,视频背景相对稳定,修复技术可以更专注于前景物体或特定区域的修复,例如通过优先级排序来决定修复的顺序。 第二类是摄像机运动条件下的视频修复问题,这类问题又包括摄像机运动平行于画面时...