2011-03-01 80 views
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; 
    } 

在此先感谢!

+0

感谢herbalessence,我看到了其他一些例子中第一个链接你贴回答我的问题,我只是想知道能有人对这行代码实现了什么解释? temp_int =(*(int *)&temp_arr [i])>> offset &0xff; 其中temp_arr包含一个浮点数组,offset是我想要偏移的位数(例如,我的分组是8位,所以偏移量从0 - > 8-> 16-> 24) – mike 2011-03-01 01:35:32

回答