Ordenador de Linhas
Ordene linhas alfabeticamente, por comprimento, em ordem inversa ou aleatória
Linhas de entrada
Linhas ordenadas
O Que É Ordenação de Linhas?
Ordenação de linhas é o processo de reorganizar as linhas de um bloco de texto de acordo com uma regra específica: ordem alfabética, ordem inversa, comprimento da linha ou embaralhamento aleatório. Ordenar linhas online é uma tarefa comum ao trabalhar com arquivos de log, dados CSV, listas de configuração ou qualquer conteúdo em texto simples onde a ordem é importante. A operação divide o texto nos caracteres de nova linha, aplica uma função de comparação ao array resultante e reúne as linhas ordenadas.
A maioria das linguagens de programação ordena strings usando comparação lexicográfica por padrão, que compara caracteres pelos seus valores Unicode. Isso significa que letras maiúsculas são ordenadas antes das minúsculas ("Banana" antes de "apple"), e dígitos antes de letras. A ordenação com suporte a locale, às vezes chamada de ordenação natural ou collation, corrige isso aplicando regras específicas do idioma. O localeCompare() do JavaScript, o locale.strxfrm() do Python e o comando sort do POSIX com LC_COLLATE fornecem ordenação sensível ao locale.
Ordenar por comprimento é útil quando você precisa encontrar as entradas mais curtas ou mais longas de uma lista, identificar valores discrepantes em saídas de log ou organizar itens por complexidade. A ordenação inversa inverte a ordem existente das linhas sem reordenar, o que é diferente da ordenação alfabética Z-A. O embaralhamento aleatório atribui a cada linha uma chave de ordenação aleatória, produzindo uma ordem diferente a cada execução. Alternar entre modos com o mesmo texto de entrada é mais rápido do que escrever um script pontual.
Por Que Usar Este Ordenador de Linhas?
Cole seu texto, escolha um modo de ordenação e obtenha o resultado instantaneamente. Sem configuração de linha de comando, sem arquivos de script, sem instalação de pacotes.
Casos de Uso do Ordenador de Linhas
Referência dos Modos de Ordenação
Esta ferramenta suporta seis modos de ordenação. A tabela abaixo descreve cada modo, o método de comparação utilizado e um exemplo de resultado para a lista de entrada: maçã, banana, cereja, tâmara, figo.
| Modo | Descrição | Método JS | Exemplo de Saída |
|---|---|---|---|
| A-Z | Alphabetical ascending | localeCompare() | apple, banana, cherry |
| Z-A | Alphabetical descending | localeCompare() reversed | cherry, banana, apple |
| Length (short) | Shortest line first | a.length - b.length | fig, date, apple, banana |
| Length (long) | Longest line first | b.length - a.length | banana, apple, date, fig |
| Reverse | Flip line order, no reordering | Array.reverse() | Last line becomes first |
| Random | Randomized comparator (biased) | Math.random() - 0.5 | Different every run |
Algoritmos de Ordenação por Trás das Cenas
Quando você chama Array.sort() em JavaScript, o motor V8 (Chrome, Node.js) usa Timsort desde 2019. Outros runtimes usam algoritmos diferentes. A tabela abaixo compara os algoritmos de ordenação mais comuns usados nas bibliotecas padrão das linguagens. Todos lidam com as cargas de trabalho de ordenação de linhas desta ferramenta em menos de um milissegundo para entradas típicas (menos de 100.000 linhas).
| Algoritmo | Usado Por | Tempo | Observações |
|---|---|---|---|
| Timsort | Python, Java (Arrays.sort) | O(n log n) | Stable, fast on partially sorted data |
| Quicksort | C stdlib, V8 (older) | O(n log n) | In-place, unstable by default |
| Merge sort | Most stable-sort implementations | O(n log n) | Stable, predictable, uses extra memory |
| Introsort | C++ std::sort, .NET | O(n log n) | Hybrid: quicksort + heapsort fallback |
| Radix sort | Fixed-length keys, integers | O(nk) | Non-comparative, linear for short keys |
Exemplos de Código
Ordene linhas programaticamente em JavaScript, Python, Go e linha de comando. Cada exemplo abrange ordenação alfabética, por comprimento e inversa.
const text = `banana
apple
cherry
date
fig`
// Sort A-Z (locale-aware)
const az = text.split('\n').sort((a, b) => a.localeCompare(b)).join('\n')
// → "apple\nbanana\ncherry\ndate\nfig"
// Sort by line length, shortest first
const byLen = text.split('\n').sort((a, b) => a.length - b.length).join('\n')
// → "fig\ndate\napple\nbanana\ncherry"
// Reverse line order (no alphabetical sorting)
const reversed = text.split('\n').reverse().join('\n')
// → "fig\ndate\ncherry\napple\nbanana"
// Remove duplicates and sort
const unique = [...new Set(text.split('\n'))].sort().join('\n')text = """banana apple cherry date fig""" lines = text.splitlines() # Sort A-Z (case-insensitive) az = sorted(lines, key=str.lower) # → ['apple', 'banana', 'cherry', 'date', 'fig'] # Sort by line length by_len = sorted(lines, key=len) # → ['fig', 'date', 'apple', 'banana', 'cherry'] # Reverse original order rev = lines[::-1] # → ['fig', 'date', 'cherry', 'apple', 'banana'] # Shuffle randomly import random random.shuffle(lines) # modifies in place
package main
import (
"fmt"
"sort"
"strings"
)
func main() {
text := "banana\napple\ncherry\ndate\nfig"
lines := strings.Split(text, "\n")
// Sort A-Z
sort.Strings(lines)
fmt.Println(strings.Join(lines, "\n"))
// → apple\nbanana\ncherry\ndate\nfig
// Sort by length
sort.Slice(lines, func(i, j int) bool {
return len(lines[i]) < len(lines[j])
})
fmt.Println(strings.Join(lines, "\n"))
// → fig\ndate\napple\nbanana\ncherry
}# Sort lines A-Z
sort file.txt
# Sort lines Z-A (reverse)
sort -r file.txt
# Sort numerically (first field)
sort -n data.txt
# Sort by line length (awk + sort + cut)
awk '{ print length, $0 }' file.txt | sort -n | cut -d' ' -f2-
# Shuffle lines randomly
shuf file.txt # GNU coreutils
sort -R file.txt # alternative (not truly uniform)
# Sort and remove duplicates
sort -u file.txt