浮点数在c中的基数排序

Posted

技术标签:

【中文标题】浮点数在c中的基数排序【英文标题】:radix sort in c on floating points numbers 【发布时间】:2011-03-01 01:00:52 【问题描述】:

好的,所以我必须为无符号整数和浮点数创建一个基数排序。我的无符号整数版本可以正常工作,但我在让它用于浮点值时遇到了一些麻烦。基本上它按浮点数的整数值对我的数组的值进行排序,但它不会根据十进制值对其进行排序。 (例如,如果 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 递增) 【参考方案1】:

基数排序是一种线性排序算法。它可以应用于floating point 值。

看看这个:

Radix Sort, Sorting a float data Radix sort floating data

【讨论】:

以上是关于浮点数在c中的基数排序的主要内容,如果未能解决你的问题,请参考以下文章

基数排序浮点数

用于浮点数的快速、基于等级的基数排序?

如何使用分布排序(基数排序等)对字符串进行排序?

排序算法之基数排序

10基数排序

排序算法 (11.基数排序)