2022年2022年各种排序算法的比较分析 .pdf

上传人:Che****ry 文档编号:34869490 上传时间:2022-08-19 格式:PDF 页数:5 大小:49.51KB
返回 下载 相关 举报
2022年2022年各种排序算法的比较分析 .pdf_第1页
第1页 / 共5页
2022年2022年各种排序算法的比较分析 .pdf_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《2022年2022年各种排序算法的比较分析 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年各种排序算法的比较分析 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、各种排序算法的稳定性与时间复杂度(c/c+ )选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。冒泡法:这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡:复杂度为 O(n*n)。当数据为正序,将不会有交换。复杂度为O(0) 。直接插入排序: O(n*n) 选择排序: O(n*n) 快速排序:平均时间复杂度log2(n)*n ,所有内部排序方法中最高好的,大多数情况下总是最好的。归并排序: n*log2(n) 堆排序:n*log2(n) 希尔排序:算法的复杂度为n 的 1.2 次幂回到主题,现在分析一下常

2、见的排序算法的稳定性,每个都给出简单的理由。(1)冒泡排序冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。(2)选择排序选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第 n-1 个元素,第 n 个元素不用选择了,因为只剩下它一个最大的元素了。那么,在

3、一趟选择,如果当前元素比一个元素小 ,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9, 我们知道第一遍选择第1 个元素 5 会和 2 交换,那么原序列中2 个 5 的相对前后名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - 顺序就被破坏了,所以选择排序不是一个稳定的排序算法。(3)插入排序插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开

4、始这个有序的小序列只有1 个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的。(4)快速排序快速排序有两个方向,左边的i 下标一直往右走,当 ai acenter_index 。如果 i 和 j 都走不动了,i j。 交换 aj和 acenter_index ,完成一趟快速排序。在中枢元素和 aj交换的时候

5、,很有可能把前面的元素的稳定性打乱,比如序列为5 3 3 4 3 8 9 10 11 , 现在中枢元素 5 和 3(第 5 个元素,下标从1开始计 )交换就会把元素 3 的稳定性打乱,所以快速排序是一个不稳定的排序算法,不稳定发生在中枢元素和aj交换的时刻。(5)归并排序归并排序是把序列递归地分成短序列,递归出口是短序列只有1 个元素 (认为直接有序 )或者 2 个序列 (1 次比较和交换 ),然后把各个有序的段序列合并成一个有序的长序列,不断合并直到原序列全部排好序。可以发现,在1 个或 2 个元素时, 1 个元素不会交换, 2 个元素如果大小相等也没有人故意交换,这不会破坏稳定性。那么,在

6、短的有序序列合并的过程中,稳定是是否受到破坏?没有,合并过程中我们可以保证如果两个当前元素相等时,我们把处在前面的序列的元素保存在结果序列的前面,这样就保证了稳定性。所以,归并排序也是稳定的排序算法。(6)基数排序基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序,最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。基数排序基于分别排序,分别收集,所以其是稳定的排序算法。(7)希尔排序 (shell) 希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所

7、以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小,插入排序对于有序的序列效率很高。所以,希尔排序的时间复杂度会比 o(n2)好一些。由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - 插入排序中移动,最后其稳定性就会被打乱,所以shell 排序是不稳定的。(8)堆排序我们知道堆的结构是节点i 的孩

8、子为 2*i 和 2*i+1 节点,大顶堆要求父节点大于等于其 2 个子节点,小顶堆要求父节点小于等于其2 个子节点。在一个长为n的序列,堆排序的过程是从第n/2 开始和其子节点共3 个值选择最大 (大顶堆 )或者最小 (小顶堆 ),这 3 个元素之间的选择当然不会破坏稳定性。但当为n/2-1, n/2-2, .1 这些个父节点选择元素时,就会破坏稳定性。有可能第n/2 个父节点交换把后面一个元素交换过去了,而第n/2-1 个父节点把后面一个相同的元素没有交换,那么这 2 个相同的元素之间的稳定性就被坏了。所以,堆排序不是稳定的排序算法各种排序法的简单介绍:1 快速排序( QuickSort

9、)快速排序是一个就地排序,分而治之,大规模递归的算法。从本质上来说,它是归并排序的就地版本。快速排序可以由下面四步组成。(1) 如果不多于 1 个数据,直接返回。(2) 一般选择序列最左边的值作为支点数据。(3) 将序列分成 2 部分,一部分都大于支点数据,另外一部分都小于支点数据。(4) 对两边利用递归排序数列。快速排序比大部分排序算法都要快。尽管我们可以在某些特殊的情况下写出比快速排序快的算法 ,但是就通常情况而言 ,没有比它更快的了 。快速排序是递归的,对于内存非常有限的机器来说,它不是一个好的选择。2 归并排序( MergeSort )归并排序先分解要排序的序列,从1 分成 2,2 分

10、成 4,依次分解,当分解到只有 1 个一组的时候,就可以排序这些分组,然后依次合并回原来的序列中,这样就可以排序所有数据。合并排序比堆排序稍微快一点,但是需要比堆排序多一倍的内存空间,因为它需要一个额外的数组。3 堆排序( HeapSort )堆排序适合于数据量非常大的场合(百万数据)。堆排序不需要大量的递归或者多维的暂存数组。这对于数据量非常巨大的序列是合适的。比如超过数百万条记录,因为快速排序,归并排序都使用递归来设计算法,在数据量非常大的时候,可能会发生堆栈溢出错误。堆排序会将所有的数据建成一个堆,最大的数据在堆顶,然后将堆顶数据和序列的最后一个数据交换。接下来再次重建堆,交换数据,依次

11、下去,就可以排序所有的数据。4 Shell 排序( ShellSort )Shell 排序通过将数据分成不同的组,先对每一组进行排序,然后再对所有的元素进行一次插入 排序, 以 减少数 据交换和移动的次 数。平均效率是名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - O(nlogn)。其中分组的合理性会对算法产生重要的影响。现在多用D.E.Knuth 的分组方法。Shell 排序比冒泡排序快5 倍,比插入排序大致快2 倍。Shel

12、l 排序比起QuickSort ,MergeSort ,HeapSort 慢很多。但是它相对比较简单,它适合于数据量在 5000 以下并且速度并不是特别重要的场合。它对于数据量较小的数列重复排序是非常好的。5 插入排序( InsertSort )插入排序通过把序列中的值插入一个已经排序好的序列中,直到该序列的结束。插入排序是对冒泡排序的改进。它比冒泡排序快2 倍。一般不用在数据大于1000 的场合下使用插入排序,或者重复排序超200 数据项的序列。6 冒泡排序( BubbleSort )冒泡排序是最慢的排序算法。在实际运用中它是效率最低的算法。它通过一趟又一趟地比较数组中的每一个元素,使较大的

13、数据下沉,较小的数据上升。它是 O(n2)的算法。7 交换排序( ExchangeSort )和选择排序( SelectSort )这两种排序方法都是交换方法的排序算法,效率都是O(n2) 。在实际应用中处于和冒泡排序基本相同的地位。它们只是排序算法发展的初级阶段,在实际中使用较少。8 基数排序( RadixSort )基数排序和通常的排序算法并不走同样的路线。它是一种比较新颖的算法,但是它只能用于整数的排序,如果我们要把同样的办法运用到浮点数上,我们必须了解浮点数的存储格式,并通过特殊的方式将浮点数映射到整数上,然后再映射回去,这是非常麻烦的事情 ,因此,它的使用同样也不多。 而且,最重要的

14、是,这样算法也需要较多的存储空间。总结下面是一个总的表格,大致总结了我们常见的所有的排序算法的特点。排序法 平均时间最差情形稳定度 额外空间备注冒泡 O(n2) O(n2) 稳定 O(1) n 小时较好交换O(n2) O(n2) 不稳定 O(1) n 小时较好选择 O(n2) O(n2) 不稳定 O(1) n 小时较好插入 O(n2) O(n2) 稳定 O(1) 大部分已排序时较好基数 O(logRB) O(logRB) 稳定 O(n) B 是真数 (0-9),R 是基数 (个十百 ) Shell O(nlogn) O(ns) 1s2 不稳定 O(1) s 是所选分组快速 O(nlogn) O

15、(n2) 不稳定 O(nlogn) n 大时较好归并 O(nlogn) O(nlogn) 稳定 O(1) n 大时较好名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - 堆 O(nlogn) O(nlogn) 不稳定 O(1) n 大时较好名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁