唠唠排序的几种思想

3,143 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

说到排序算法,我们先静下心来,思索十分钟,看自己能想出来几种方法。

我先来说说我想到的几种方法。

方法一:

第一轮寻找,找出最大的那个,放到最后的位置;第二轮寻找,找出第二大的,放到倒数第二个位置.....这样依次找下去,直到最后两个数,完成一次比较。

方法二:

先保证局部有序,以这部分排好序的数据作为根据地,不断地吸收新鲜的血液进来,并且把新进来的数安排到合适的位置。

方法三:

选出一个数来,和所有的数比较一圈,比它小的放它左边,比它大的放它右边。这样把数据一分为2,左边的数再选出一个数来,将它放在它应该处的位置上,这样左边的数又被一分为2,这样一直分下去。同理右边的数也是这样处理。最后每一部分只剩下一个数,而这一个数的位置是确定,不需要再进行比较。

方法四:

把需要排序的数组分割成多个小段,每一段都排好序,先保证局部有序。再将两个相邻的小段融合到一起,并排好序,这样不断地进行融合,最终将两个大段融合成一个整体,也就排好序了。

方法五:

利用堆的特性,大顶堆的根节点,是最大的数,将根节点节点放到最后。对堆进行调整,再次形成大顶堆,再将根节点放到放到倒数第二的位置。这样最后,所有的数据就会按照从小到大的顺序进行排序。

方法六:

从左到右,相邻数据进行数值比较,如果右边的数据大于左边的数据,那么左右数据进行交换,第一圈比较下来,最右边的数值肯定是最大的,几轮数据比较下来,所有的元素数据位置不会有所变动,这样就完成了排序。

我的思考结束了,再对照下教科书上的定义,来看下这几种方法的官方名称。

方法一为选择排序,方法二为插入排序,方法三为快速排序,方法四为归并排序,方法五为堆排序,方法六为冒泡排序。

除此之外还有希尔排序,桶排序,计数排序等。如果我们能将,这几种排序的思想都领悟清楚,并且可以手写实现,那么这个程序猿的实力还是可以的。