三种答案
1:直接使用工具排出来的,实干型,结果最重要
2:使用工具类提供的排序算法,比如JAVA Collections.sort进行排序,效率类
3:自己实行个算法来解决这个问题,作者类,爱较真!
思想
算法是有区别的,选择合适的算法来实行排序,是有不同效果的,这里号码不限个数,当然模拟巨量数据,以至于内存不够使用等等情况,不在考虑之列,数据结构其实提高一种高效的算法,叫做基数排序,电话号码后两位最多也就00-99 那么可以根据这个进行排序。
代码如下
public class SortNum {
public NumHeader[] sort(List<String> numbers) {
NumHeader[] n = new NumHeader[100];
for (String number : numbers) {
Integer num = Integer.parseInt(number.substring(9));
NumHeader header = n[num];
if (header == null) {
header = new NumHeader();
n[num] = header;
}
NumNo tail = header.getTail();
if (tail == null) {
tail = new NumNo();
header.setTail(tail);
header.setHeader(tail);
}
NumNo cur = new NumNo();
cur.setNo(number);
tail.setNext(cur);
header.setTail(cur);
}
return n;
}
class NumHeader {
NumNo header;
NumNo tail;
public NumNo getHeader() {
return header;
}
public void setHeader(NumNo header) {
this.header = header;
}
public NumNo getTail() {
return tail;
}
public void setTail(NumNo tail) {
this.tail = tail;
}
}
class NumNo {
String no;
NumNo next;
public NumNo getNext() {
return next;
}
public void setNext(NumNo next) {
this.next = next;
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
}
}
该算法使用了基数排序的思想,将号码根据末两位进行比对,只需要对比一次,就可以确定该号码排序位置,然后剩下的,除了创建节点,全部都是操作的内存空间的数据,速度自然杠杠的!