Line Sorter
Řaďte řádky abecedně, podle délky, obráceně nebo náhodně
Vstupní řádky
Seřazené řádky
Co je řazení řádků?
Řazení řádků je proces přeuspořádání řádků textového bloku podle určitého pravidla: abecedního pořadí, opačného pořadí, délky řádku nebo náhodného promíchání. Řazení řádků online je běžný úkol při práci s logovacími soubory, CSV daty, konfiguračními seznamy nebo jakýmkoli prostým textem, kde záleží na pořadí. Operace rozdělí text na znacích nového řádku, aplikuje porovnávací funkci na výsledné pole a seřazené řádky opět spojí.
Většina programovacích jazyků řadí řetězce ve výchozím nastavení pomocí lexikografického porovnání, které porovnává znaky podle jejich kódových bodů v Unicode. To znamená, že velká písmena se řadí před malá ("Banana" před "apple") a číslice se řadí před písmena. Řazení zohledňující prostředí (locale), někdy označované jako přirozené řazení nebo kolace, to napravuje aplikací jazykově specifických pravidel. Funkce localeCompare() v JavaScriptu, locale.strxfrm() v Pythonu a příkaz POSIX sort s proměnnou LC_COLLATE zajišťují řazení zohledňující prostředí.
Řazení podle délky je užitečné, když potřebujete najít nejkratší nebo nejdelší položky v seznamu, identifikovat odlehlé hodnoty ve výstupu logů nebo uspořádat položky podle složitosti. Obrácené řazení převrátí stávající pořadí řádků bez jejich přeuspořádání, což se liší od abecedního řazení Z–A. Náhodné promíchání přiřadí každému řádku náhodný klíč řazení, čímž vznikne pokaždé jiné pořadí. Přepínání mezi režimy na stejném vstupu je rychlejší než psaní jednorázového skriptu.
Proč používat tento Line Sorter?
Vložte text, zvolte režim řazení a výsledek získáte okamžitě. Žádné nastavení příkazového řádku, žádné soubory skriptů, žádná instalace balíčků.
Případy použití Line Sorteru
Přehled režimů řazení řádků
Nástroj podporuje šest režimů řazení. Níže uvedená tabulka popisuje každý režim, použitou metodu porovnání a ukázkový výsledek pro vstupní seznam: apple, banana, cherry, date, fig.
| Režim | Popis | JS metoda | Ukázkový výstup |
|---|---|---|---|
| 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 |
Řadicí algoritmy na pozadí
Při volání Array.sort() v JavaScriptu používá engine V8 (Chrome, Node.js) od roku 2019 algoritmus Timsort. Jiná prostředí používají odlišné algoritmy. Níže uvedená tabulka porovnává nejběžnější řadicí algoritmy používané ve standardních knihovnách programovacích jazyků. Všechny zvládají pracovní zátěž řazení řádků v tomto nástroji za méně než milisekundu pro typické vstupy (do 100 000 řádků).
| Algoritmus | Používá | Čas | Poznámky |
|---|---|---|---|
| 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 |
Příklady kódu
Řaďte řádky programově v JavaScriptu, Pythonu, Go a na příkazovém řádku. Každý příklad pokrývá abecední, délkové a obrácené řazení.
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