给定一个 IP 地址数组arr[] ,其中每个元素都是一个 IPv4 地址,任务是按升序对给定的 IP 地址进行排序。
例子:
Input: arr[] = {‘126.255.255.255’, ‘169.255.0.0’, ‘169.253.255.255’}
Output: ‘126.255.255.255’, ‘169.253.255.255’, ‘169.255.0.0’
Explanation:
As the second octet of the third IP Address is less than the second IP Address whereas the first octet is same. Due to which the third IP Address will be smaller than the Third IP Address.
169.255.0.0 > 169.253.255.255
Input: arr[] = {‘192.168.0.1’, ‘192.168.1.210’, ‘192.168.0.227’}
Output: ‘192.168.0.1’, ‘192.168.0.227’, ‘192.168.1.210’
方法:这个想法是使用自定义比较器对给定的 IP 地址进行排序。由于 IPv4 有 4 个八位字节,我们将逐个八位字节比较地址八位字节。
- 检查IP地址的第一个八位字节,如果第一个地址的第一个八位字节更大,则返回True以交换IP地址,否则返回False。
- 如果 IP 地址的第一个八位字节相同,则比较两个 IP 地址的第二个八位字节。如果第一个地址具有更大的第二个八位字节,则返回 True 以交换 IP 地址,否则返回 False。
- 如果 IP 地址的第二个八位字节也相同,则比较两个 IP 地址的第三个八位字节。如果第一个地址具有更大的第三个八位字节,则返回 True 以交换 IP 地址,否则返回 False。
- 如果 IP 地址的第三个八位字节也相同,则比较两个 IP 地址的第四个八位字节。如果第一个地址具有更大的第三个八位字节,则返回 True 以交换 IP 地址,否则返回 False。
- 如果第四个八位字节也相同,则两个 IP 地址相等。然后也返回False。
下面是上述方法的实现:
Python
# Python implementation to sort
# the array of the IP Address
from functools import cmp_to_key
# Custom Comparator to sort the
# Array in the increasing order
def customComparator(a, b):
# Breaking into the octets
octetsA = a.strip().split(".")
octetsB = b.strip().split(".")
# Condition if the IP Address
# is same then return 0
if octetsA == octetsB:
return 0
elif octetsA[0] > octetsB[0]:
return 1
elif octetsA[0] < octetsB[0]:
return -1
elif octetsA[1] > octetsB[1]:
return 1
elif octetsA[1] < octetsB[1]:
return -1
elif octetsA[2] > octetsB[2]:
return 1
elif octetsA[2] < octetsB[2]:
return -1
elif octetsA[3] > octetsB[3]:
return 1
elif octetsA[3] < octetsB[3]:
return -1
# Function to sort the IP Addresses
def sortIPAdddress(arr):
# Sort the Array using
# Custom Comparator
arr = sorted(arr, key = \
cmp_to_key(customComparator))
print(*arr)
return arr
# Driver Code
if __name__ == "__main__":
arr = ['192.168.0.1',
'192.168.1.210',
'192.168.0.227']
# Function Call
sortIPAdddress(arr)
192.168.0.1
192.168.0.227
192.168.1.210
时间复杂度: O(N*logN)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live