String str[]={"-123","89","-10","456"};
str
es una matriz de cadenas, con cada cadena en el formato de un entero, y debe realizar la clasificación en esta matriz aO(n log n)
tiempo.Las cadenas en
str
pueden representar enteros positivos y negativos. La longitud máxima de estas cadenas es de 1024 caracteres.
Sé que una solución de este problema es convertir las cadenas en números, luego compararlos aparte de esto; ¿Hay alguna otra solución a este problema?
Respuestas:
Otra solución es implementar su propia función de comparación:
-
, entonces la cadena que comienza con-
es el número más pequeño.-
, entonces compare la longitud de las cadenas. La cadena más larga es el número más pequeño. Si ambas cadenas tienen la misma longitud, realice una comparación de cadena estándar, pero niegue el resultado.fuente
"-0"
), si existen, se ordenarían frente a los normales, pero eso me parece bien ...find_first_not_of("0")
y páselos paracompare()
sobrecargar, que pide pos / len para ambos lados de la comparación.Aquí hay un ejemplo mínimo y potencialmente insuficiente (no maneja ceros iniciales, espacios en blanco, etc.) que hace lo que desea.
Los comentarios explican lo que está haciendo. :)
fuente
!=
lugar de^
tener el mismo resultado para booleanos, pero el resultado ya es booleano, lo que hace que el reparto explícito quede obsoleto (y, además, los paréntesis ...).less_as_number
?).