一般而言,个人在面试的时候,会问面试者知道哪些排序算法,选一个自己熟悉排序算法。
讲下它的主要特点(大部分人会选冒泡),比如时间复杂度 / 稳定性 这些,再比如有个序列 (1, 4, 2, 3) 要比较多少次。如果答的不好,就不继续。
如果继续,一般会把重点放在 快速排序 和 堆排,进一步可能会要求手写实现。
比如快速排序,一般而言,肯定是会有 bug 的。其实能手写快排无 bug,不管是不是提前背好的(记性好也是优点),都会有很好的印象。
然后会讨论下在输入是特定序列的情况下,当前的算法有什么缺点或优点。如果这个过程可以一直持续下去,到最后得分都会比较高,但很少见。另外如果面试者比较熟悉基数排序这类算法,会问下一些偏理论的问题,比如比较排序算法的下界是多少,为什么基数排序可以突破这个下界等等。
说那么多,主要是还是想表达,大致了解可能够,但是不够好,最好还是深入理解,如果能死记硬背更好,不然很大概率会被问住。这并不是挑刺。
当然,工作中用到这些面试内容的可能性不高,但是这还是要问下,不然怎么拉开差距了^_^。
『算法导论』的第二部分 『排序和顺序统计学』,是很好的排序算法基础。几十页,认真看。有次我自己去面试别的工作,一个问题想了很久才给出解决方案(相当一步一步重新思考了遍),后来空闲的时候翻『算法导论』才发现里面有现成的解决方案(完全没有印象了,自己想的细节还没写的那么好,悲伤的故事。)。所以多看看。
『编程珠玑』第十一章 『排序』,对快速排序做了细节性的讨论。一般对付面试不成问题。
下面这个图有时间看看,不太常用的了解即可,当然有时间深入更好。自己对它们之间特点(复杂度 / 稳定性 / 是否是比较排序)有基本认识,对他们之间的实现差异以及为什么有一定程度的了解。维基百科其实讲的特别好,就是不知道登得上去不。

一个程序员学习平台分享给你们,让你在实践中积累经验掌握原理。主要方向是JAVA工程师。如果你想拿高薪,想突破瓶颈,想跟别人竞争能取得优势的,想进BAT但是有担心面试不过的,可以加我的Java学习交流群:282711949。
注:加群要求
1、大学学习的是Java相关专业,毕业后面试受挫,找不到对口工作可以
2、在公司待久了,现在过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的
3、参加过线下培训后,知识点掌握不够深刻,就业困难,想继续深造
4、已经在Java相关部门上班的在职人员,对自身职业规划不清晰,混日子的
5、有一定的C语言基础,接触过java开发,想转行的
小号勿扰,不喜勿加
作者:邓卓
链接:https://www.zhihu.com/question/264854548/answer/286065483
网友评论