假设我有一个包含100个数字的数组。数组中唯一不同的值是1,2和3.这些值在整个数组中随机排序。例如,数组可能填充为:
int values[100];
for (int i = 0; i < 100; i++)
values[i] = 1 + rand() % 3;
如何有效地对这样的数组进行排序?
答案 0 :(得分:11)
最快的解决方案是不要“排序”:
最后,您将拥有一个完全排序的数组。
通常,当您与阵列的大小相比具有非常小的可能值范围时,这可以是有用的O(n)排序算法。
答案 1 :(得分:2)
Dutch National flag algorithm是常用的算法,实际上是快速排序的一个变体中的分区步骤(1对应于小于,2对应于3和大于3)。在该变体中,您不需要对中间部分进行排序。