给定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)