4
好吧,所以我必须为无符号整数和浮点数创建一个基数排序。我的未签名的整数版本的工作原理应该是这样,但我在获得浮点值的时候遇到了一些麻烦。基本上它是通过浮点数的整数值对数组的值进行排序的,但是它不会根据十进制值进行排序。 (例如,36.65234将出现在36.02311之前,如果它首先出现在未排序的数组中) 此代码段是我进行位操作和屏蔽的位置,我确信这是我的问题所在。基数在浮点数上的排序
/* For loop to create bin */
for(int i=0; i<n; i++){
temp_int = (((unsigned int)(list[i]))>>bitwise)&0xff;
bin[temp_int] = bin[temp_int]+1;
}
/*For loop to get map */
for (int i=0; i<256; i++) {
map[i+1] = bin[i]+count;
count = map[i+1];
}
/* For loop to copy "sorted" values into other array */
for (int i=0; i<n; i++) {
temp_int = (((unsigned int)(list[i]))>>bitwise)&0xff;
int buf_loc = map[temp_int];
temp_arr[buf_loc] = list[i];
map[temp_int] = map[temp_int]+1;
}
在此先感谢!
感谢herbalessence,我看到了其他一些例子中第一个链接你贴回答我的问题,我只是想知道能有人对这行代码实现了什么解释? temp_int =(*(int *)&temp_arr [i])>> offset &0xff; 其中temp_arr包含一个浮点数组,offset是我想要偏移的位数(例如,我的分组是8位,所以偏移量从0 - > 8-> 16-> 24) – mike 2011-03-01 01:35:32