我需要一些帮助。
我有一个需要排序的分隔整数值列表。一个例子:
典型(alpha?)排序:
1.1.32.22
11.2.4
2.1.3.4
2.11.23.1.2
2.3.7
3.12.3.5
正确(数字)排序:
1.1.32.22
2.1.3.4
2.3.7
2.11.23.1.2
3.12.3.5
11.2.4
我无法弄清楚如何设置算法以使用 n 数量的十进制分隔符和 m 整数字段数进行排序。
有什么想法吗?这必须在以前完成。如果您需要更多信息,请与我们联系。
非常感谢! -Daniel
答案 0 :(得分:3)
您真正需要做的就是编写“compare()”,然后将其插入任何排序算法。
要编写比较,从左到右比较每个字段,如果任何字段更高,则返回该参数更高。如果一个参数较短,则假设其余字段为0。
答案 1 :(得分:1)
versionsort
完全符合您的要求。
比较算法是strverscmp
,这里是手册页中对它的描述:
这个功能的作用是什么 以下。如果两个字符串相等, 返回0.否则找到位置 两个字节之间的属性 在它们两个字符串相等之前, 在它之后直接有一个 区别。找到最大的 连续数字字符串包含 (或从此开始,或以此结束) 位置。如果其中一个或两个是 空,然后返回strcmp()会 已经返回(数字排序) 字节值)。否则,比较两者 数字字符串数字,数字 带有一个或多个前导的字符串 零被解释为具有它们 前面的小数点(所以在 特定数字字符串更多 前导零点在数字之前 前导零较少的字符串)。 因此,订购是000,00,01, 010,09,0,1,9,10。
答案 2 :(得分:1)
查看radix sort。
答案 3 :(得分:0)
它被称为自然排序。见Natural Sorting algorithm。 例如,Python中的Darius Bacon's answer:
def sorted_nicely(strings):
"Sort strings the way humans are said to expect."
return sorted(strings, key=natural_sort_key)
def natural_sort_key(key):
import re
return [int(t) if t.isdigit() else t for t in re.split(r'(\d+)', key)]
答案 4 :(得分:-1)
一般解决方案是将此字符串转换为字节数组,然后使用qsort并指定比较函数。