Pegue uma matriz de números inteiros contendo números negativos, números positivos e zeros. Agrupe-o com uma iteração e no lugar para que todos os números negativos cheguem primeiro, seguidos por todos os zeros, seguidos por todos os números positivos.
Exemplo:
Input: 5, 3, 0, -6, 2, 0, 5
Output: -6, 0, 0, 3, 2, 5, 5
Observe que os números não precisam ser totalmente classificados: apenas classificados por sinal.
Portanto, a matriz final ficará assim: -, -, ..., -, -, 0, 0, ..., 0, 0, +, +, ..., +, +
Regras
- Você só pode usar a matriz de entrada e uma quantidade constante de memória adicional (ou seja, você não pode criar mais matrizes)
- Você pode usar apenas um loop, que pode executar apenas quantas vezes o comprimento da matriz. Você não pode usar funções internas que ocultam qualquer tipo de loop. Isso inclui funções de classificação internas.
- O resultado deve estar no formato que descrevi
O vencedor será a pessoa que enviará o código mais curto (contado em bytes) que altera a matriz inicial para um formato correto (como descrito acima).
code-golf
number
sorting
array-manipulation
Ionică Bizău
fonte
fonte
sort(...)
não é boa, pois provavelmente faz mais de uma iteração.Respostas:
C, 92
Provavelmente, isso pode ser reduzido em pelo menos 10 bytes; há muitas expressões desperdiçadas.
O primeiro argumento deve apontar para o início da matriz; o segundo deve apontar após o final da matriz.
Sem jogar com gerador de teste aleatório:
fonte
STATA 242
Segue a página da Wikipedia exatamente. Obrigado @PeterTaylor
Leva a entrada como um conjunto de números separados por espaço, de entrada padrão e saída, como tal, para saída padrão.
fonte
Python 2: 116 bytes
Esta é uma tradução em Python do pseudo-código da bandeira nacional holandesa.
Possíveis 112 bytes
Não tenho certeza, se isso for permitido. Ele cria uma segunda matriz de tamanho 3 (quantidade constante de memória adicional!).
fonte
C, 90
Implementação direta do algoritmo no artigo da Wikipedia, de acordo com o comentário de Peter Taylor sobre a questão.
Espera encontrar os dados em uma matriz chamada
a
como a outra resposta C.n
,p
ez
são indicadores para a inserção de números e zeros negativos e positivos.n
ep
são tomados como argumentos apontando para o primeiro e o último elementos dos dados.fonte
ECMAScript 157 Bytes
Pega os números como um conjunto separado por espaço ou por vírgula em um diálogo de prompt e retorna o resultado com um diálogo de alerta.
fonte
PHP (146)
http://3v4l.org/ivRX5
A sintaxe da variável relativamente detalhada do PHP é um pouco dolorosa aqui ...
fonte
Rebol -
149142140Esta é uma porta direta do pseudocódigo da wikipedia da bandeira nacional holandesa. Abaixo está como parece não-destruído:
Exemplo de uso:
NB Matrizes Rebol (blocos) não usam vírgulas -
[5 3 0 -6 2 0 5]
E se estiver OK, envolva isso em uma função que pega uma matriz e a modifica no local, então podemos reduzi-lo para 128 caracteres:
De fato, se não for necessário retornar a matriz (ou seja, apenas modificar), você poderá cortar mais 1 caractere.
fonte
C ++
Solução sem golfe: n conta os negativos adicionados à frente da matriz. Para cada elemento, se troca negativa com o elemento em n, se troca zero com o elemento em n + 1, troque com o último elemento.
fonte
CJam -
7267Entrada:
[5 3 4 0 -6 2 0 5]
Saída:
[-6 0 0 4 2 3 5 5]
Experimente em http://cjam.aditsu.net/
Explicação:
Esta é outra implementação do algoritmo da wikipedia, usando
T
fori
eU
forj
(ambos inicializados automaticamente em 0).fonte