Ordenar linhas de texto

Ordene linhas alfabeticamente, com opções de maiúsculas e trim na comparação.

Descrição

Ordenar uma lista de texto parece simples até o momento em que você se pergunta: café vem antes ou depois de caro? Em português, a resposta depende das regras de colação do locale — e elas são mais complicadas do que parecem. A especificação Unicode inclui o DUCET (Default Unicode Collation Element Table), uma tabela de mais de 7.000 entradas que define o peso de cada caractere para fins de ordenação em múltiplos idiomas.

O problema prático surge ao ordenar strings com acentos ou caracteres especiais. A ordenação lexicográfica pura por código Unicode coloca o é depois do z, o que não faz sentido em nenhum idioma humano. A solução correta é usar localeCompare com o locale e as opções de sensibilidade adequados. Na web, a Intl.Collator API padronizada pelo ECMAScript cuida disso — e faz a diferença entre uma lista que parece certa para o usuário e uma que parece quebrada.

Os algoritmos de ordenação têm uma história rica. A bubble sort é a mais famosa para fins didáticos e a menos usada em produção. O quicksort, proposto por Tony Hoare em 1959, dominou décadas por sua performance média de O(n log n). O timsort, criado por Tim Peters em 2002 para o Python e depois adotado pelo Java e pelo motor V8 do JavaScript, combina merge sort com insertion sort e aproveita sequências já ordenadas nos dados — uma genialidade prática. A propriedade de estabilidade — linhas com o mesmo valor mantendo a ordem relativa original — importa quando se ordena por múltiplos critérios em passagens separadas.

Detalhamento técnico

Ordenação e acentuação: o problema que ninguém percebe até errar

  • Usar sort() nativo do JavaScript sem localeCompare coloca 'é' depois de 'z' porque compara por valores Unicode, não por regras de idioma. Em uma lista de produtos ou nomes em português, o resultado parece completamente quebrado.
  • O Intl.Collator com locale 'pt-BR' lida corretamente com ã, ç, ê, ó e todos os outros caracteres do português brasileiro, usando as regras de colação definidas pelo Unicode CLDR.
  • A sensibilidade de acentuação (sensitivity: 'base' vs 'accent') determina se 'e' e 'é' são considerados iguais para fins de comparação ou tratados como letras distintas.
  • A ordenação natural (natural sort) interpreta números dentro de strings como valores numéricos: item10 vem depois de item9, não antes. Isso requer a opção numeric: true no Intl.Collator.

Casos de uso práticos

  • Alfabetizar listas de nomes, países, cidades e produtos antes de exibir para o usuário final ou incluir em documentos.
  • Ordenar chaves de arquivos de tradução (i18n) para facilitar a revisão e evitar duplicatas ocultas em arquivos YAML ou JSON.
  • Organizar imports em arquivos de código de forma consistente, reduzindo ruído em code reviews.
  • Preparar dados textuais antes de aplicar busca binária, que exige que a lista esteja ordenada.
  • Ordenar linhas de um CSV por uma coluna específica antes de comparar com outra versão do arquivo.

Guia da ferramenta

  • O objeto tratado Texto dividido em linhas.

  • O que a ferramenta faz Ordena linhas alfabeticamente (A→Z ou Z→A), com opções de sensibilidade a maiúsculas e trim na chave de ordenação. Ordenação estável.

  • Por que usar Organizar listas, comparar visualmente conjuntos, preparar arquivos para diff mais limpo.

Exemplo de Código

Ordenação com locale em JavaScript
// Ordenação correta para português brasileiro
const linhas = text.split('\n').filter(Boolean);
linhas.sort((a, b) =>
  a.localeCompare(b, 'pt-BR', { sensitivity: 'variant', numeric: true })
);
const resultado = linhas.join('\n');
Ordenação reversa (Z → A)
linhas.sort((a, b) =>
  b.localeCompare(a, 'pt-BR', { sensitivity: 'variant' })
);

Entrada

banana
apple
cherry → apple
banana
cherry

Perguntas frequentes

Para que serve esta ferramenta?

Ela roda 100% no seu navegador: útil para validar, formatar ou converter dados no dia a dia de desenvolvimento.

Meus dados são enviados a algum servidor?

O processamento é feito localmente via JavaScript. Não armazenamos o conteúdo que você cola nas caixas de texto.

Posso usar em produção ou para dados reais?

Use por sua conta e risco. Para segredos (senhas, tokens), prefira ambientes controlados e políticas da sua empresa. E lembre sempre de revisar os conteúdos gerados. Nunca confie cegamente nas coisas que vê na internet.