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