- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
--
---
.
几种排序的算法时间复杂度比较
选择排序:不稳定,时间复杂度 O(n^2)
选择排序的基本思想是对待排序的记录序列进行 n-1 遍的处理,第 i 遍处理是将 L[i..n] 中最小者与 L[i] 交换位置。这样,经过 i 遍处理之后,前 i 个记录的位置已经是正确的了。
插入排序:稳定,时间复杂度 O(n^2)
插入排序的基本思想是, 经过 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-≤i1),使得 L[j] ≤L[j+1]时为止。图 1 演示了
对 4 个元素进行插入排序的过程,共需要 (a),(b),(c) 三次插入。
冒泡排序:稳定,时间复杂度 O(n^2)
冒泡排序方法是最简单的排序方法。 这种方法的基本思想是, 将待排序的元素看作是竖着排列的 “气泡 ”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个 “气泡 ”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。 如果发现两个相邻元素的顺序不对, 即 “轻”的元素在下面, 就交换它们的位置。 显然,处理一遍之后,“最轻 ”的元素就浮到了最高位置;处理二遍之后, “次轻 ”的元素就浮到了次高位置。在作第二遍处理时, 由于最高位置上的元素已是 “最轻 ”元素,所以不必检查。一般地,第 i 遍处理时,不必检查第 i 高位置以上的元素, 因为经过前面 i-1 遍的处理,它们已正确地排好序。
堆排序:不稳定,时间复杂度 O(nlog n)
堆排序是一种树形选择排序, 在排序过程中, 将 A[n] 看成是完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系来选择最小的元素。
5. 归并排序:稳定,时间复杂度 O(nlog n)
页
.
设有两个有序(升序)序列存储在同一数组中相邻的位置上,不妨设为
A[l..m] ,A[m+1..h] ,将它们归并为一个有序数列,并存储在 A[l..h] 。
快速排序:不稳定,时间复杂度 最理想 O(nlogn) 最差时间 O(n^2)
快速排序是对冒泡排序的一种本质改进。它的基本思想是通过一趟扫描后,
使得排序序列的长度能大幅度地减少。 在冒泡排序中, 一次扫描只能确保最大数
值的数移到正确位置,而待排序序列的长度可能只减少 1。快速排序通过一趟扫
描,就能确保某个数(以它为基准点吧)的左边各数都比它小,右边各数都比它
大。然后又用同样的方法处理它左右两边的数, 直到基准点的左右只有一个元素
为止。
希尔排序:不稳定,时间复杂度 平均时间 O(nlogn) 最差时间 O(n^s)
1s2
在直接插入排序算法中, 每次插入一个数, 使有序序列只增加 1 个节点,并
且对插入下一个数没有提供任何帮助。如果比较相隔较远距离(称为 增量)的
数,使得数移动时能跨过多个元素,则进行一次比较就可能消除多个元素交换。
D.L.shell 于 1959 年在以他名字命名的排序算法中实现了这一思想。 算法先将要排序的一组数按某个增量 d 分成若干组,每组中记录的下标相差 d.对每组中全部元素进行排序, 然后再用一个较小的增量对它进行, 在每组中再进行排序。 当增量减到 1 时,整个要排序的数被分成一组,排序完成。
排序类别
时间复杂度
稳定
插入排序
O(n
2 )
√
希尔排序
O(n
2 )
×
冒泡排序
O(n
2 )
√
选择排序
O(n
2 )
×
快速排序
O(Nlogn)
×
堆排序
O(Nlogn)
×
归并排序
O(Nlogn)
√
页
.
页
原创力文档


文档评论(0)