假设我有一个" oracle"其分类如下:
1,3,2000,11,17,20
成为
1,11,17,20,2000,3
(我不知道这个机制叫什么)。这类似于UNIX的sort
命令(没有-n
)。
I remember Windows used to sort filenames like this prior to Windows XP
现在,我有一堆数字和这个sort
oracle,我想用数字排序数字,我怎样才能预处理数字,以便sort
oracle返回正确的顺序。
那么,是否有一个函数f()
,它接受这些数字
排序f([1,3,2000,11,17,20])
会返回正确的顺序。
问题是,我们需要在一个系统上以数字方式对一堆数字进行排序,其中唯一可用的排序是我上面描述的排序过程。
答案 0 :(得分:2)
这称为lexicographical sort。您可以使用0
s填充数字,这样它们都具有相同的位数,以使其表现得像数字排序。例如,使用带有printf的%04d
格式代码。
答案 1 :(得分:0)
L
的数字列表。 L
中的所有单位数字,生成一个数字列表L1
,然后创建一个新的数字列表,其中包含一位数字,其编号与L
相同{1}}生成一个数字列表S
(如果L
中没有单个数字,S
将为空)。 L1
中的所有两位数字,生成一个数字列表L2
,并按照L1
中S
的相同顺序追加两位数字。 1}}(如果L
中没有两位数字,L1
仍然与L
相同,且S
不会附加任何数字。)Ln-1
删除所有n位数字,生成一个空的数字列表,并按照Ln-1
到S
的相同顺序追加n位数字。 S
包含数字排序的数字列表,只使用“oracle”排序函数和一个返回数字位数的函数,希望你的系统有。当然,如果“oracle”排序列表Lk
是可变的,则从Lk-1
中删除所有k位数字时,您无需创建新的数字列表L