使用排序功能进行数字排序

时间:2014-02-20 21:17:07

标签: sorting

假设我有一个" 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])

  

会返回正确的顺序。

问题是,我们需要在一个系统上以数字方式对一堆数字进行排序,其中唯一可用的排序是我上面描述的排序过程。

2 个答案:

答案 0 :(得分:2)

这称为lexicographical sort。您可以使用0 s填充数字,这样它们都具有相同的位数,以使其表现得像数字排序。例如,使用带有printf的%04d格式代码。

答案 1 :(得分:0)

  1. 使用此“oracle”排序函数对数字进行排序,得到一个名为例如L的数字列表。
  2. 删除L中的所有单位数字,生成一个数字列表L1,然后创建一个新的数字列表,其中包含一位数字,其编号与L相同{1}}生成一个数字列表S(如果L中没有单个数字,S将为空)。
  3. 删除L1中的所有两位数字,生成一个数字列表L2,并按照L1S的相同顺序追加两位数字。 1}}(如果L中没有两位数字,L1仍然与L相同,且S不会附加任何数字。)
  4. ...
  5. Ln-1删除所有n位数字,生成一个空的数字列表,并按照Ln-1S的相同顺序追加n位数字。
  6. 现在S包含数字排序的数字列表,只使用“oracle”排序函数和一个返回数字位数的函数,希望你的系统有。
  7. 当然,如果“oracle”排序列表Lk是可变的,则从Lk-1中删除所有k位数字时,您无需创建新的数字列表L