按IP地址大小排序

本文介绍了如何使用二分插入排序算法对IP地址进行排序。通过将IP地址表示为(a.b.c.d)的形式,并逐位进行比较,确定IP地址的大小。详细步骤包括比较每个十进制部分,直至四位全部比较完成。

IP地址(Internet Protocol Address)排序

1.IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数

2.当用编程解决IP地址排序问题就要解决两个IP地址的比较,比较思路如下(i=1、2、3)
1>当两个IP地址第i位不等时就可以返回比较值
2>当两个IP地址第i位不等时,比较第i+1
3>重复一、二操作
4>直到四位都比较完,则说明两个IP地址相等

3.本算法采用的是二分插入排序,正则表达式

	static Pattern pattern = Pattern.compile("(\\d{1,3})");//正则表达式分组

	public static void main(String[] args) {
		String[] strings = { "127.25.36.4", "1.2.3.4", "136.25.12.1", "127.2.5.3", "127.25.36.5" };//初始化
		int len = strings.length;//保存IP地址数组的长度
		for (int i = 1; i < len; i++) {
			String string = strings[i];//临时储存一个IP地址
			int left = 0;
			int right = i - 1;
			int mid;
			while (left <= right) {
				mid = (left + right) / 2;
				if (compareTo(strings[i], strings[mid])) {//比较两个IP地址的大小
					left = mid + 1;
				} else {
					right = mid - 1;
				}
			}
			for (int j = i; j > left; j--) {
				strings[j] = strings[j - 1];//移动数组
			}
			strings[left] = string;
		}
		for (int i = 0; i < len; i++) {
			System.out.println(strings[i]);//遍历数组
		}

	}

	public static boolean compareTo(String s1, String s2) {
		Matcher m1 = pattern.matcher(s1);
		Matcher m2 = pattern.matcher(s2);//给定Matcher对象
		while (m1.find() && m2.find()) {
			if (Integer.parseInt(m1.group()) > Integer.parseInt(m2.group())) {//比较
				return true;
			} else if (Integer.parseInt(m1.group()) < Integer.parseInt(m2.group())) {
				return false;
			} else {
				continue;
			}
		}
		return true;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值