对包含其中仅3个元素的100个元素的整数数组进行排序

Exp*_*ple 3 c++ sorting algorithm

假设我有一个包含100个数字的数组.数组中唯一不同的值是1,2和3.这些值在整个数组中随机排序.例如,可以将数组填充为:

int values[100];

for (int i = 0; i < 100; i++)
    values[i] = 1 + rand() % 3;
Run Code Online (Sandbox Code Playgroud)

我怎样才能有效地对这样的数组进行排序?

mik*_*era 11

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

  • 运行数组并计算1,2和3的出现次数.这些计数应该适合寄存器...
  • 使用正确数量的1s,2s和3s填充数组,覆盖已有的数组.

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

通常,当您与阵列的大小相比具有非常小的可能值范围时,这可以是有用的O(n)排序算法.

  • 这称为桶排序,如果您对某些进一步阅读感兴趣,则是最简单的基数排序形式. (4认同)