在适当的位置进行基数排序 - 试图理解如何

时间:2017-08-17 10:57:16

标签: algorithm sorting explain radix-sort in-place

我正在浏览所有已知/典型的排序算法(插入,冒泡,选择,快速,合并排序......),现在我只读了基数排序。

我想我已经理解了它的概念,但我仍然想知道它是如何在现场完成的?让我解释一下我是如何理解的:

它由两个阶段组成:分区和收集。它们将交替执行。在分区阶段,我们将数据分成每个..让我称之为桶。在收集阶段,我们将再次收集数据。将对要排序的键的每个位置执行两个阶段。所以循环的数量是基于键的大小(如果我们想要排序整数,那么我们更愿意说数字的数量)。

我不想详细解释2个阶段,因为它太长了,我希望你能读到它,因为我不知道如何就地做这个算法..

也许你可以用文字而不是代码来解释?我需要知道我的考试,但我在互联网上找不到任何解释,至少不是一种简单易懂的方式。

如果您想让我解释一下,请告诉我。我会做任何事来理解它。

1 个答案:

答案 0 :(得分:2)

维基百科(有时)是你的朋友:https://en.wikipedia.org/wiki/Radix_sort#In-place_MSD_radix_sort_implementations

我引用了这篇文章:

  

二进制MSD基数排序,也称为二进制快速排序,可以   通过将输入数组拆分为两个区域来实现就地实现 -   0s bin和1s bin。 0s bin从一开始就生长   数组,而1s bin是从数组的末尾开始生长的。 [...]   。最重要的   检查第一个数组元素的位。如果该位为1,那么   第一个元素与1s bin前面的元素交换   边界(数组的最后一个元素),1s bin生成   通过递减1s边界数组索引来获得一个元素。如果这一点   是0,然后第一个元素保持在其当前位置,并且   0s bin由一个元素生成。 [...] 0s bin和1s bin是   然后根据每个数组元素的下一位递归排序。   递归处理一直持续到最低有效位为止   用于分类。

主要信息是:它是二进制递归基数排序。换句话说:

  • 每个步骤只有两个桶,比方说0和1。由于算法是“就地”,您可以交换元素(如快速排序),将每个元素放在右侧桶(0或1)中,具体取决于其基数。

  • 递归处理:每个桶分为两个桶,具体取决于下一个基数。

理解无符号整数非常简单:您考虑从最重要到最不重要的位。对于其他数据类型,它可能更复杂(并且过度杀伤)。

总结快速排序算法的差异:

  • 在快速排序中,您选择的一个枢轴定义了两个“桶”:低于枢轴,大于枢轴。

  • 在二进制基数排序中,两个桶由基数定义(例如最高位)。

在这两种情况下,您都交换元素以将每个元素放在其“桶”中并递归处理。