📜  按升序对给定的 IP 地址进行排序

📅  最后修改于: 2021-09-07 02:31:57             🧑  作者: Mango

给定一个 IP 地址数组arr[] ,其中每个元素都是一个 IPv4 地址,任务是按升序对给定的 IP 地址进行排序。

例子:

方法:这个想法是使用自定义比较器对给定的 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