2014-02-20 44 views
1

假設我有一個 「預言」,其排序如下:使用排序功能的數值排序

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

這叫做lexicographical sort。您可以使用0 s填充數字,以便它們具有相同的數字位數,以使其具有類似於數字排序的行爲。例如,在printf中使用%04d格式的代碼。

0
  1. 使用此「oracle」排序功能對數字進行排序,從而生成一個數字列表,例如:L
  2. L刪除所有的1位數字,導致數L1的列表,並以相同的順序創建具有單位數號碼的新名單,因爲他們在L,造成數S列表(如果L中沒有單個數字號碼,則S將爲空)。
  3. L1刪除所有雙位數字,導致數L2的名單,並在他們在L1S相同的順序追加兩位數的數字(如果沒有兩位數的號碼LL1仍然與L相同,並且沒有號碼被附加到S)。
  4. ...
  5. Ln-1中刪除所有的n位數字,產生一個空的數字列表,並按Ln-1S的順序附加n位數字。
  6. S現在S包含數字排序的數字列表,只使用「oracle」排序函數和一個函數,該函數返回一個數字的位數,希望您的系統具有該數字。

當然,你不爲你Lk-1刪除所有K位數字如果「神諭」排序列表L是可變的需要創建數字Lk的新列表。