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