请教一个带“-”的文字编号排序问题

2019-04-16 10:07:32 +08:00
 glaucus

有 N 条数据,每条数据有一个形如 1-1-2,10-3-1 ... 的编号,同时也可能有 3-2,5-8 这种的,请问对这些编号进行排序?有什么效率比较高的算法?

2604 次点击
所在节点    程序员
26 条回复
AlisaDestiny
2019-04-16 15:06:04 +08:00
```java
public class Test {

public static void main(String[] args) {
new Test().test1();
}
public void test1(){
ArrayList<String> list = new ArrayList<>();
list.add("2-3");
list.add("1-3-3");
list.add("2");
list.add("4-3-3-2");
list.add("1-2-3");
list.add("1");
list.add("2-4");
list.add("5-3-3");
list.add("2-3-1");
list.sort((o1, o2) -> {
String[] s1 = o1.split("-");
String[] s2 = o2.split("-");
int mLen = Math.min(s1.length,s2.length);
for(int i=0;i<mLen;i++){
int a = Integer.parseInt(s1[i]);
int b = Integer.parseInt(s2[i]);
if (a != b){
return a - b;
}
}
return (s1.length - s2.length);
});
System.out.println(list);//[1, 1-2-3, 1-3-3, 2, 2-3, 2-3-1, 2-4, 4-3-3-2, 5-3-3]
}
}
```
tantalu
2019-04-16 19:16:17 +08:00
都有数据范围的,果断桶排序
wxb2dyj
2019-04-17 02:00:31 +08:00
先去掉-,原下划线之间的数字不够两位的补齐为两位,然后桶排序,时间复杂度 O(n),排好序后再补-,去掉多余的 0
wxb2dyj
2019-04-17 02:05:13 +08:00
@wxb2dyj 说错了,应该用基数排序。
no1xsyzy
2019-04-17 10:08:09 +08:00
多维链表简单插排不就行了?
要觉得这样效率不行链表部分换堆
fsafdasfsdafsd
2019-04-17 21:12:20 +08:00
分隔,排序。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/555590

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX