范文无忧网面试笔试笔试回答

笔试中各种排序算法的复杂度

12月08日 编辑 fanwen51.com

[2015KPMG毕马威笔试经验]先说一下我背景吧,我是上海复旦大学旁边的某个知名财经大学的学生,专业是工商管理,成绩一般般,在工商管理班是属于倒数的,不过放到年级上就是前30%的水平,所以填成绩排名时从来只...+阅读

大家应该注意的是复杂度中带logN的这几个算法!

排序法平均时间最差情形稳定度额外空间备注冒泡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是基数(个十百)

ShellO(nlogn)

O(n^1.25)

???

O(ns) 1s2不稳定O(1)s是所选分组快速O(nlogn)O(n2)不稳定O(nlogn)n大时较好归并O(nlogn)O(nlogn)稳定O(1)n大时较好堆O(nlogn)O(nlogn)不稳定O(1)n大时较好各算法的时间复杂度

平均时间复杂度

插入排序 O(n^2)

冒泡排序 O(n^2)

选择排序 O(n^2)

快速排序 O(n log n)

堆排序 O(n log n)

归并排序 O(n log n)

基数排序 O(n)

希尔排序 O(n^1.25)

1 快速排序(QuickSort)

快速排序是一个就地排序,分而治之,大规模递归的算法。从本质上来说,它是归并排序的就地版本。快速排序可以由下面四步组成。

(1) 如果不多于1个数据,直接返回。

(2) 一般选择序列最左边的值作为支点数据。

(3) 将序列分成2部分,一部分都大于支点数据,另外一部分都小于支点数据。

(4) 对两边利用递归排序数列。

快速排序比大部分排序算法都要快。尽管我们可以在某些特殊的情况下写出比快速排序快的算法,但是就通常情况而言,没有比它更快的了。快速排序是递归的,对于内存非常有限的机器来说,它不是一个好的选择。

2 归并排序(MergeSort)

归并排序先分解要排序的序列,从1分成2,2分成4,依次分解,当分解到只有1个一组的时候,就可以排序这些分组,然后依次合并回原来的序列中,这样就可以排序所有数据。合并排序比堆排序稍微快一点,但是需要比堆排序多一倍的内存空间,因为它需要一个额外的数组。

3 堆排序(HeapSort)

堆排序适合于数据量非常大的场合(百万数据)。

堆排序不需要大量的递归或者多维的暂存数组。这对于数据量非常巨大的序列是合适的。比如超过数百万条记录,因为快速排序,归并排序都使用递归来设计算法,在数据量非常大的时候,可能会发生堆栈溢出错误。

堆排序会将所有的数据建成一个堆,最大的数据在堆顶,然后将堆顶数据和序列的最后一个数据交换。接下来再次重建堆,交换数据,依次下去,就可以排序所有的数据。

4 Shell排序(ShellSort)

Shell排序通过将数据分成不同的组,先对每一组进行排序,然后再对所有的元素进行一次插入排序,以减少数据交换和移动的次数。平均效率是O(nlogn)。其中分组的合理性会对算法产生重要的影响。现在多用D.E.Knuth的分组方法。

Shell排序比冒泡排序快5倍,比插入排序大致快2倍。Shell排序比起QuickSort,MergeSort,HeapSort慢很多。但是它相对比较简单,它适合于数据量在5000以下并且速度并不是特别重要的场合。它对于数据量较小的数列重复排序是非常好的。

5 插入排序(InsertSort)

插入排序通过把序列中的值插入一个已经排序好的序列中,直到该序列的结束。插入排序是对冒泡排序的改进。它比冒泡排序快2倍。一般不用在数据大于1000的场合下使用插入排序,或者重复排序超过200数据项的序列。

6 冒泡排序(BubbleSort)

冒泡排序是最慢的排序算法。在实际运用中它是效率最低的算法。它通过一趟又一趟地比较数组中的每一个元素,使较大的数据下沉,较小的数据上升。它是O(n^2)的算法。

7 交换排序(ExchangeSort)和选择排序(SelectSort)

这两种排序方法都是交换方法的排序算法,效率都是 O(n2)。在实际应用中处于和冒泡排序基本相同的地位。它们只是排序算法发展的初级阶段,在实际中使用较少。

8 基数排序(RadixSort)

基数排序和通常的排序算法并不走同样的路线。它是一种比较新颖的算法,但是它只能用于整数的排序,如果我们要把同样的办法运用到浮点数上,我们必须了解浮点数的存储格式,并通过特殊的方式将浮点数映射到整数上,然后再映射回去,这是非常麻烦的事情,因此,它的使用同样也不多。而且,最重要的是,这样算法也需要较多的存储空间。

相关笔试题目推荐:

运营维护工程师笔试题 房地产销售代理人员笔试题 申银万国校园招聘笔试题目

延伸阅读:

2015重庆移动校招笔试经验重庆移动重庆地区的校招终于是告一段落了,今天刚好闲下来,想想移动校招这一路走来,还是有所收获,自己也是从前辈的帖子获取了很多信息,所以在这里也跟大家分享下自己一路走来的经...

2015天职国际网测笔试经验我坐标南京,非211非965学校,投的也是南京所。一直很中意天职国际,实习的时候和天职是同一座大厦,那时候就很希望能去楼上工作,所以宣讲会的话特地从江宁跑去浦口去听,还算幸运,简历...

2015中国银行笔试经验分享今年中行笔试时间好早啊!是所有银行中最早的一个了,楼主之前准备了两个月,今天考完的感觉就是、、、都白看了= =超级难!好吧可能有些复习的好的觉得还行吧,废话不多说,直接上。...

衣恋2014笔试经验30日晚广州在中大笔试。 什么文具用品都不用带,现场会发(其实只有一支笔而已,要用修正带可以跟工作人员借)。 hr一上来就跟我们说,这次笔试非常难,甚至有人一道题都做不对什么的...

安永2014年笔试经验分享关于考几道 怎么考 时间巴拉巴拉的就不赘述了 就简单说一下我记得的题目吧 Verbal 比较多以下哪个正确或者以下哪个错误的题目 比较麻烦 难度递增 一篇文章2道题 1. GPS定位...

欢聚时代2017校招产品经理笔试经验今年的笔试是在华工五山校区举行的,风尘仆仆的从大学城赶过去啊!去了之后按照短信的通知找教室,教室里有笔试技术的也有笔试产品的,没有固定位置,但按照一列技术类一列非技术类...

中行2015校园招聘笔试经验我2014年11月1日下午1点30到4点30参加了中国银行2015校招笔试,上午在仙林南邮参加江苏电信笔试,2个小时的时间内赶到了江宁南医参加了中行的考试。以下是考试内容和时间段,都是...

百度2015软件开发工程师笔试百度的题总体来说不难,都是一些基础的题。好像近几年都有这样的趋势,计算机网络,操作系统,数据库,每个基础课出一道题。接着是三道程序设计题。最后是系统设计题。所以好好看计算...

笔试的几个面试技巧笔试的几个面试技巧1.科学答卷拿到试卷后,首先应通览一追,了解题目的多少和难易程度,以便掌握答题的速度,然后根据先易后难的原则排出答题的顺序、先攻相对简单的题,后攻难题。这...

推荐阅读
图文推荐
栏目列表