对一个包含 100 个元素的整数数组进行排序,其中只有 3 个元素

Sorting an integer array of 100 elements having only 3 elements in it

本文关键字:元素 排序 整数 一个 包含 数组      更新时间:2023-10-16

假设我有一个100个数字的数组。数组中唯一的非重复值是 1、2 和 3。这些值在整个数组中随机排序。例如,数组可能填充为:

int values[100];
for (int i = 0; i < 100; i++)
    values[i] = 1 + rand() % 3;

如何有效地对这样的数组进行排序?

最快的解决方案是根本不"排序":

  • 运行数组并计算 1、2 和 3 的出现次数。这些计数应该有望适合寄存器......
  • 用正确数量的 1、2 和 3 填充数组,覆盖已经存在的任何内容。

最后,您将拥有一个完全排序的数组。

通常,当与数组大小相比,可能值的范围非常小时,这可能是一种有用的 O(n) 排序算法。

荷兰国旗算法是经常引用的算法,实际上是快速排序变体之一中的分区步骤(1 对应于小于,2 等于,3 等于)。在该变体中,您无需对中间部分进行排序。

相关文章: