Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 具有不同铲斗大小的铲斗排序_Algorithm_Range - Fatal编程技术网

Algorithm 具有不同铲斗大小的铲斗排序

Algorithm 具有不同铲斗大小的铲斗排序,algorithm,range,Algorithm,Range,我试图根据变化范围将0..2^12之间的所有数字分成4个桶 例如,我有[0,1000,2100,4000,4096],所以我有4个桶:[0-1000],[1000-2100],[2100-4000],[4000-4096] 我如何构建一个函数,将每个数字放入正确的数字中-没有if、开关盒等 我需要一些非常有效的东西,所以我正在寻找一种逐位运算,或者加\减,然后再逐位运算。输入的格式是[0,a,b,c,4096]。如果你不介意预先计算,你可以选择建议的数组。否则,您可以根据以下假设执行类似操作:

我试图根据变化范围将0..2^12之间的所有数字分成4个桶

例如,我有[0,1000,2100,4000,4096],所以我有4个桶:[0-1000],[1000-2100],[2100-4000],[4000-4096]

我如何构建一个函数,将每个数字放入正确的数字中-没有if、开关盒等


我需要一些非常有效的东西,所以我正在寻找一种逐位运算,或者加\减,然后再逐位运算。

输入的格式是[0,a,b,c,4096]。如果你不介意预先计算,你可以选择建议的数组。否则,您可以根据以下假设执行类似操作:

  • 32位有符号数字
  • 水桶:
    • n
    • a>31)-(n-b)>>31)-(n-c)>>31)

      其思想是,如果数字变为负数,则将设置最高位,并将其移动31个位置,得到1


      您也可以将3个减法表达式相加,得到4个存储桶,但第0个存储桶包含的数字最高。

      您可以使用一个固定的4096元素数组L say,因此L[i]是i的存储桶编号。例如,使用存储桶编号的两个最低有效位:
      bucket=value&3