各种排序算法稳定性和时间复杂度小结.docxVIP

各种排序算法稳定性和时间复杂度小结.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
各样排序算法稳固性和时间复杂度小结 各样排序算法稳固性和时间复杂度小结 各样排序算法稳固性和时间复杂度小结 各样排序算法的稳固性和时间 复杂度小结 ———————————————————————————————— ———————————————————————————————— 日期: 各样排序算法的稳固性和时间复杂度小结 选择排序、迅速排序、希尔排序、堆排序冒泡排序、插入排序、合并排序和基数排序  不是稳固 的排序算法 , 是稳固 的排序算法。 冒泡法 : 这是最原始,也是尽人皆知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡: 复杂度为 O(n *n 〕。当数据为正序,将不会有互换。复杂度为 O(0 〕。 直接插入排序:  O〔 n*n) 选择排序: O(n*n) 迅速排序 :均匀时间复杂度 log2(n)*n ,所有内部排序方法中最高好的 ,大部分状况下老是最好的。 合并排序: log 2〔n )* n 堆排序: log2( n〕 *n 希尔排序 :算法的复杂度为 n 的 1.2 次幂 对于迅速排序剖析 这里我没有给出行为的剖析,因为这个很简单  ,我们直接来剖析算法: 第一我们考虑最理想的状况 1.数组的大小是 2 的幂 ,这样分下去一直能够被 2 整除。假定为 2 的 k 次方 ,即k =log2 〔 n)。 2.每次我们选择的值恰好是中间值 ,这样,数组才能够被平分。 第一层递归,循环 n 次,第二层循环2 *(n/2 〕. ..... 所以共有 n+2(n /2〕 +4(n/4 〕 +... +n* 〔 n/n) = n+n+n+...+n= k* n =lo g2〔 n)* n 所以算法复杂度为 O(lo g2〔n )*n ) 其余的状况只会比这类状况差,最差的状况是每次选择到的 middle 都是最小值或最大值么他将变为互换法〔因为使用了递归 ,状况更糟〕 。可是你认为这类状况发生的几率有多大??呵呵,你完整不用担忧这个问题。实践证明,大部分的状况 ,迅速排序老是最好的。  ,那 假如你担忧这个问题, 你能够使用堆排序 ,这是一种稳固的O 〔 l og2 (n〕*n )算法 ,可是往常状况下速度要慢 于迅速排序 (因为要重组堆〕 。 本文是针对老是记不住这个或许想真实理解究竟为何是稳固或许不稳固的人准备的。 第一 ,排序算法的稳固性大家应当都知道,平常地讲就是能保证排序前 数其在序列的前后地点次序和排序后它们两个的前后地点次序相同。在简单形式化一下 果 Ai = Aj, Ai 本来在地点前 ,排序后 Ai 仍是要在 Aj 地点前。  2 个相等的 ,如 其次,说一下稳固性的利处。排序算法假如是稳固的 ,那么从一个键上排序 ,而后再从 另一个键上排序 ,第一个键排序的结果能够为第二个键排序所用。基数排序就是这样 ,先按低 位排序 ,逐次按高位排序,低位相同的元素其次序再高位也相同时是不会改变的。此外,如 果排序算法稳固 ,对鉴于比较的排序算法而言,元素互换的次数可能会少一些〔个人感觉, 没有证明〕。 回到主题,此刻剖析一下常有的排序算法的稳固性  ,每个都给出简单的原因。 (1)冒泡排序 冒泡排序就是把小的元素往前调或许把大的元素今后调。 比较是相邻的两个元素 比较,互换也发生在这两个元素之间。所以 ,假如两个元素相等,我想你是不会再无聊地把他们俩互换一下的 ;假如两个相等的元素没有相邻 ,那么即便经过前面的两两互换把两个相邻起来 ,这时候也不会互换 ,所以相同元素的前后次序并无改变,所以冒泡排序是一种稳固排序算法。 (2〕选择排序 选择排序是给每个地点选择目前元素最小的 ,比方给第一个地点选择最小的,在剩 余元素里面给第二个元素选择第二小的,挨次类推 ,直到第 n-1 个元素 ,第 n 个元素不用选择 了,因为只剩下它一个最大的元素了。那么 ,在一趟选择,假如目前元素比一个元素小,而该 小的元素又出此刻一个和目前元素相等的元素后边, 那么互换后稳固性就被损坏了。 比较拗 口,举个例子,序列5 8 5 2 9, 我们知道第一遍选择第 1 个元素 5 会和 2 互换,那 么原序列中 2 个5的相对前后次序就被损坏了 ,所以选择排序不是一个稳固的排序算法。 (3〕插入排序 插入排序是在一个已经有序的小序列的根基上 ,一次插入一个元素。自然,刚开始这 个有序的小序列只有 1 个元素, 就是第一个元素。 比较是从有序序列的末端开始, 也就是想 要插入的元素和已经有序的最大者开始比起 ,假如比它大那么直接插入在后来面 ,否那么向来往前 找直到找到它该插入的地点。 假如遇见一个和插入元素相等的, 那么插入元素把想插入的元 素放在相等元素的后边。所以,相等元素的前后次序没有改变 ,从

文档评论(0)

182****5045 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档