今天,我们来看一道小米面试的题目,很直白,也很简单,那就是希尔排序。
按常理来说,快速排序和堆排序才是常考的内容,希尔排序出现的频率很低。
这也启发大家,在准备笔试面试的时候,不仅要注意深度,也需要注意广度。
图解希尔排序
原始的数组如下,有一点台球的感觉吧:
接下来,我们对这个数组进行希尔排序,希尔排序的本质是缩小增量排序,我们来看看,是如何逐步缩小增量的。
第一步:
元素个数n=10,那么gap=5,接下来,我们来分为5组,如下:
在5组内分别进行插入排序,得到的结果为:
第二步:
我们让gap再次减半,也就是gap=2,于是重新分为2组,如下:
在2组内分别进行插入排序,得到的结果为:
第三步:
我们让gap再次减半,即gap=1,也就是分为1组,得到的结果为:
在1组内进行插入排序,得到的结果为:
这就是希尔排序的全部过程,思路非常简单,抓住缩小增量这个本质就行。通过不断缩小gap的值,在每个组内进行插入排序。
当然,小米的面试题肯定不会就此让你轻松结束,肯定会问时间复杂度和空间复杂度,所以,在准备面试时也不要忽略基本功。
希尔排序程序
既然思路已经完全说清楚了,那么程序就相对简单了,来看看希尔排序的程序:
结果为:
希尔排序的思路和程序并不难,但常常容易被忽略,导致笔试面试会比较被动。
*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。