- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
.
几种常见算法的介绍及复杂度分析
1.基本概念
1.1 稳定排序 (stable sort)和非稳定排序
稳定排序是所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序, 。反
之,就是非稳定的排序。比如:一组数排序前是 a1,a2,a3,a4,a5,其中 a2=a4,经过某种排序
后为 a1,a2,a4,a3,a5,则我们说这种排序是稳定的,因为 a2排序前在 a4的前面,排序后它还
是在 a4的前面。假如变成 a1,a4,a2,a3,a5就不是稳定的了。
1.2 内排序 ( internal sorting ) 和外排序 ( external sorting)
在排序过程中, 所有需要排序的数都在内存, 并在内存中调整它们的存储顺序, 称为内排序;
在排序过程中, 只有部分数被调入内存, 并借助内存调整数在外存中的存放顺序排序方法称
为外排序。
1.3 算法的时间复杂度和空间复杂度
所谓算法的时间复杂度,是指执行算法所需要的计算工作量。 一个算法的空间复杂度,一
般是指执行这个算法所需要的内存空间。
2.几种常见算法
2.1 冒泡排序( Bubble Sort )
冒泡排序方法是最简单的排序方法。 这种方法的基本思想是, 将待排序的元素看作是竖着排
列的 “气泡 ”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个 “气泡 ”
序列处理若干遍。 所谓一遍处理, 就是自底向上检查一遍这个序列, 并时刻注意两个相邻的
元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即 “轻 ”的元素在下面, 就交换它
们的位置。显然,处理一遍之后, “最轻 ”的元素就浮到了最高位置;处理二遍之后, “次轻 ”
的元素就浮到了次高位置。在作第二遍处理时, 由于最高位置上的元素已是 “最轻 ”元素, 所
以不必检查。一般地,第 i 遍处理时,不必检查第 i 高位置以上的元素,因为经过前面 i-1
遍的处理,它们已正确地排好序。
冒泡排序是稳定的,算法时间复杂度是 O(n ^2) 。
2.2 选择排序( Selection Sort )
选择排序的基本思想是对待排序的记录序列进行 n-1遍的处理,第 i 遍处理是将 L[i..n] 中最
小者与 L[i] 交换位置。这样,经过 i 遍处理之后,前 i 个记录的位置已经是正确的了。
选择排序是不稳定的,算法复杂度是 O(n ^2 ) 。
2.3 插入排序 (Insertion Sort )
插入排序的基本思想是, 经过 i-1 遍处理后 ,L[1..i-1] 己排好序。第 i 遍处理仅将 L[i] 插入 L[1..i-1]
的适当位置,使得 L[1..i] 又是排好序的序列。要达到这个目的,我们可以用顺序比较的方
法。首先比较 L[i] 和 L[i-1] ,如果 L[i- 1] ≤ L[i],则 L[1..i] 已排好序,第 i 遍处理就结束了;否
则交换 L[i] 与 L[i-1] 的位置,继续比较 L[i-1] 和 L[i-2] ,直到找到某一个位置 j(1 ≤j -1)≤i,使得
L[j] ≤ L[j+1]时为止。图 1演示了对 4个元素进行插入排序的过程,共需要 (a),(b),(c) 三次插入。
直接插入排序是稳定的,算法时间复杂度是
文档评论(0)