📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)
📝 职场经验干货:
算法思想:
1 将ip地址使用.进行分割,分别获取4段ip地址的数字值,使用int函数转换为整数类型,然后通过每一段数字的位移分别获取一个32位的2进制数,再将4段二进制数求和。
例如:
IP: 192.168.1.1
-
第1段(192):左移24位 192 * (2^24)
-
第2段(168):左移16位 168 * (2^16)
-
第3段(1): 左移8位 1 * (2^8)
-
第4段(1): 不移位 1 * (2^0)
192.168.1.1 的二进制表示:
-
192 = 11000000
-
168 = 10101000
-
1 = 00000001
-
1 = 00000001
位移后:
-
192 << 24: 11000000 00000000 00000000 00000000
-
168 << 16: 00000000 10101000 00000000 00000000
-
1 << 8: 00000000 00000000 00000001 00000000
-
1: 00000000 00000000 00000000 00000001
相加后:
11000000 10101000 00000001 00000001 (32位)
2 转换后可以直接使用数值比较
3 利用Python的sorted()函数
4 使用key参数自定义排序规则
5 将IP地址转换为整数进行比较
代码实现:
def ip_to_int(ip):
"""
将IP地址转换为整数,便于比较和排序
Args:
ip (str): 点分十进制的IP地址
Returns:
int: 转换后的整数表示
"""
# 将IP地址按.分割
parts = ip.split('.')
# 将每个部分转换为整数并计算最终的整数值
# 使用移位运算快速计算
return (int(parts[0]) << 24) + \
(int(parts[1]) << 16) + \
(int(parts[2]) << 8) + \
int(parts[3])
def sort_ip_addresses(ip_list):
"""
对IP地址列表进行排序
Args:
ip_list (list): IP地址字符串列表
Returns:
list: 排序后的IP地址列表
"""
# 使用内置排序,但自定义排序键
return sorted(ip_list, key=ip_to_int)
测试代码
def main():
# 示例IP地址列表
ips = [
"192.168.1.1",
"10.0.0.1",
"172.16.0.1",
"8.8.8.8"
]
# 排序并打印结果
sorted_ips = sort_ip_addresses(ips)
print("排序后的IP地址:")
for ip in sorted_ips:
print(ip)
if name == "main":
main()
复杂度分析
-
时间复杂度:
-
转换IP:O(1)
-
排序:O(n log n)(Python使用Timsort算法)
-
总体时间复杂度:O(n log n)
-
-
空间复杂度:
-
转换IP:O(1)
-
排序:O(n)
-
总体空间复杂度:O(n)
-
优点
-
转换方法高效
-
代码简洁清晰
-
利用Python内置排序
注意事项
-
假设IP地址格式合法
-
适用于IPv4地址
-
不处理特殊IP格式
运行示例:
排序后的IP地址:
8.8.8.8
10.0.0.1
172.16.0.1
192.168.1.1
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】


16万+

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



