1、桶排序的桶数
如果已知N个关键字的取值范围是在0到M-1之间,并且M比N小很多,这种情况下就用桶排序,其原理就是为关键字的每个可能取值建立一个“桶”(Bucket),也就是建立M个桶;
我们将 int范围内的每一个整数 x 表示为 x = (t + 1) *a + b(0<=b <=t)的形式,这样 x即归属于编号为 a的桶,桶的大小为t+1,
int getID(int x, long w) {
return x < 0 ? (x + 1ll) / w - 1 : x / w;
}
如w=10, 因为非负数是09,1019…这种一组,而负数是-1~-10, -11-20…这些是一组,如果-1~-10直接除以10,会被分到两组中,而不是-1这一组,所以先+1变成-0–9,与正数一致,再除以10,最后减1,正好是-1这一组。