面试-电话号码后两位排序 自创

三种答案

    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;
		}

	}
}

该算法使用了基数排序的思想,将号码根据末两位进行比对,只需要对比一次,就可以确定该号码排序位置,然后剩下的,除了创建节点,全部都是操作的内存空间的数据,速度自然杠杠的!

转载于:https://my.oschina.net/tiger/blog/601287

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值