一位科研人员在进行一系列实验后,得到了大量的以字母和数字混合命名的数据文件,例如 `Exp-A-Run1`, `Exp-A-Run01`, `Exp-A-Run10` 等。 标准的按文件名排序(字典序)会错误地将 `Exp-A-Run10` 排在 `Exp-A-Run2` 之前,这给数据分析带来了不便。 为了解决这个问题,需要一个能够理解数字真实大小的“自然排序”程序。 您能否编写一个程序,对给定的 个文件名进行这种特殊的自然排序? 排序规则: 程序需要从左到右逐段比较两个文件名 和 : 1. 分段处理 :将文件名分割成“连续的非数字字符串”和“连续的数字字符串”段落。例如,`ts010tc12` 被视为 `["ts", "010", "tc", "12"]`。 2. 逐段比较 : 如果 和 的当前段都是非数字串,则按字典序(区分大小写)进行比较。如果不同,则排序完成。 如果 和 的当前段都是数字串,则将它们转换为整数值进行比较。如果数值不同,则排序完成。 如果一个是数字串,另一个是非数字串,则规定数字串排在前面。 3. 前缀优先 :如果一个文件名是另一个文件名的前缀(例如 `test` 和 `testcase1`),则较短的前缀名排在前面。 4. 稳定性 :排序必须是稳定的。如果根据以上所有规则,两个文件名被认为是等价的(例如 `Run01` 和 `Run1`),它们在输入中的原始相对顺序必须在输出中保持不变。
输入描述:
第一行:一个整数 ,代表待排序的文件名数量。()接下来 行:每行一个文件名 。文件名仅包含大小写字母和数字。文件名长度在 范围内。文件名中任意连续的数字串长度不超过 9。
输出描述:
共 行,每行输出一个排序后的文件名。
示例3
输入
3
ts09sc1
ts01tc1
ts010tc12
输出
ts01tc1
ts09sc1
ts010tc12
备注:
本题由牛友@Charles 整理上传
加载中...