几种常见算法的介绍及复杂度分析.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 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)

Lxq3610 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档