Ordenar las direcciones IP dadas en orden ascendente

Dada una array arr[] de direcciones IP donde cada elemento es una dirección IPv4 , la tarea es clasificar las direcciones IP dadas en orden creciente.
Ejemplos: 
 

Entrada: arr[] = {‘126.255.255.255’, ‘169.255.0.0’, ‘169.253.255.255’} 
Salida: ‘126.255.255.255’, ‘169.253.255.255’, ‘169.255.0.0’ 
Explicación: 
Como el segundo octeto de la tercera dirección IP es menor que la segunda dirección IP mientras que el primer octeto es el mismo. Por lo que la tercera dirección IP será más pequeña que la tercera dirección IP. 
169.255.0.0 > 169.253.255.255 
Entrada: arr[] = {‘192.168.0.1’, ‘192.168.1.210’, ‘192.168.0.227’} 
Salida: ‘192.168.0.1’, ‘192.168.0.227’, 6.192.2.1 ‘ 
 

Enfoque: la idea es usar un comparador personalizado para ordenar las direcciones IP dadas. Como IPv4 tiene 4 octetos, compararemos las direcciones octeto por octeto. 
 

  • Verifique el primer octeto de la dirección IP. Si la primera dirección tiene un primer octeto mayor, devuelva True para intercambiar la dirección IP; de lo contrario, devuelva False.
  • Si el primer octeto de las direcciones IP es el mismo, compare el segundo octeto de ambas direcciones IP. Si la primera dirección tiene un segundo octeto mayor, devuelva True para intercambiar la dirección IP; de lo contrario, devuelva False.
  • Si el segundo octeto de las direcciones IP también es el mismo, compare el tercer octeto de ambas direcciones IP. Si la primera dirección tiene un tercer octeto mayor, devuelva True para intercambiar la dirección IP; de lo contrario, devuelva False.
  • Si el tercer octeto de las direcciones IP también es el mismo, compare el cuarto octeto de ambas direcciones IP. Si la primera dirección tiene un tercer octeto mayor, devuelva True para intercambiar la dirección IP; de lo contrario, devuelva False.
  • Si el cuarto octeto también es el mismo, entonces ambas direcciones IP son iguales. Luego también devuelve Falso.

A continuación se muestra la implementación del enfoque anterior:
 

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 sortIPAddress(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
    sortIPAddress(arr)
Producción: 

192.168.0.1 
192.168.0.227 
192.168.1.210

 

Complejidad de tiempo: O(N*logN)
 

Publicación traducida automáticamente

Artículo escrito por HarshTyagi4 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *