Tome una matriz de enteros que contengan números negativos, números positivos y ceros. Agrúpelo con una iteración y en su lugar de manera que todos los números negativos sean los primeros, seguidos de todos los ceros, seguidos de todos los números positivos.
Ejemplo:
Input: 5, 3, 0, -6, 2, 0, 5
Output: -6, 0, 0, 3, 2, 5, 5
Tenga en cuenta que los números no necesitan estar completamente ordenados: solo ordenados por signo.
Entonces, la matriz final se verá así: -, -, ..., -, -, 0, 0, ..., 0, 0, +, +, ..., +, +
Reglas
- Solo puede usar la matriz de entrada y una cantidad constante de memoria adicional (es decir, no puede crear más matrices)
- Solo puede usar un bucle, que puede ejecutarse solo tantas veces como la longitud de la matriz. No puede utilizar funciones integradas que oculten ningún tipo de bucle. Esto incluye funciones de clasificación incorporadas.
- El resultado debe estar en el formato que describí
El ganador será la persona que presentará el código más corto (contado en bytes) que cambia la matriz inicial a un formato correcto (como se describe anteriormente).
code-golf
number
sorting
array-manipulation
Ionică Bizău
fuente
fuente
sort(...)
no está bien, ya que probablemente realiza más de una iteración.Respuestas:
C, 92
Esto probablemente podría reducirse en al menos 10 bytes; hay muchas expresiones que se desperdician.
El primer argumento debe apuntar al comienzo de la matriz; el segundo debe apuntar después del final de la matriz.
Sin golfista con generador de prueba aleatorio:
fuente
STATA 242
Sigue la página de Wikipedia exactamente. Gracias @PeterTaylor
Toma la entrada como un conjunto de números separados por espacios desde la entrada estándar y las salidas como tales también para salida estándar.
fuente
Python 2: 116 bytes
Esta es una traducción en Python del pseudocódigo de la bandera nacional holandesa.
Posibles 112 bytes
No estoy seguro, si esto está permitido. Crea una segunda matriz de tamaño 3 (¡cantidad constante de memoria adicional!).
fuente
C, 90
Implementación directa del algoritmo en el artículo de wikipedia según el comentario de Peter Taylor sobre la pregunta.
Espera encontrar los datos en una matriz llamada
a
como la otra respuesta C.n
,p
yz
son punteros para la inserción de números negativos y positivos y ceros.n
yp
se toman como argumentos que apuntan al primer y último elemento de los datos.fuente
ECMAScript 157 Bytes
Toma los números como un conjunto separado por espacios o por comas de un cuadro de diálogo y devuelve el resultado con un cuadro de diálogo de alerta.
fuente
PHP (146)
http://3v4l.org/ivRX5
La sintaxis variable relativamente detallada de PHP es un poco dolorosa aquí ...
fuente
Rebol -
149142140Este es un puerto directo del pseudocódigo wikipedia de la bandera nacional holandesa. A continuación se muestra cómo se ve sin golf:
Ejemplo de uso:
NÓTESE BIEN. Las matrices Rebol (bloques) no usan comas -
[5 3 0 -6 2 0 5]
Y si está bien, envuelva esto en una función que tome una matriz y la modifique en su lugar, entonces podemos reducirlo a 128 caracteres:
De hecho, si no fuera necesario devolver la matriz (es decir, simplemente modificar), podría eliminar 1 carácter más.
fuente
C ++
Solución sin golf: n cuenta los negativos agregados al frente de la matriz. Para cada elemento si el intercambio negativo con el elemento en n, si el intercambio cero con el elemento en n + 1 más intercambie con el último elemento.
fuente
CJam -
7267Entrada:
[5 3 4 0 -6 2 0 5]
Salida:
[-6 0 0 4 2 3 5 5]
Pruébalo en http://cjam.aditsu.net/
Explicación:
Esta es otra implementación del algoritmo de wikipedia, usando
T
fori
yU
forj
(ambos inicializados automáticamente a 0).fuente