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

被折叠的 条评论
为什么被折叠?



