Sortownik wierszy
Sortuj wiersze alfabetycznie, wg długości, odwrotnie lub losowo
Wiersze wejściowe
Posortowane wiersze
Czym jest sortowanie wierszy?
Sortowanie wierszy to proces porządkowania wierszy bloku tekstu według określonej reguły: kolejności alfabetycznej, odwrotnej, długości wiersza lub losowego mieszania. Sortowanie wierszy online to częste zadanie podczas pracy z plikami logów, danymi CSV, listami konfiguracyjnymi lub dowolną zawartością w formacie zwykłego tekstu, w której kolejność ma znaczenie. Operacja dzieli tekst na znakach nowej linii, stosuje funkcję porównującą do wynikowej tablicy i łączy posortowane wiersze z powrotem.
Większość języków programowania domyślnie sortuje ciągi znaków przy użyciu porównania leksykograficznego, które porównuje znaki według ich punktów kodowych Unicode. Oznacza to, że wielkie litery są sortowane przed małymi ("Banan" przed "jabłkiem"), a cyfry przed literami. Sortowanie uwzględniające lokalizację, zwane czasem naturalnym sortowaniem lub kolacją, rozwiązuje ten problem, stosując reguły specyficzne dla danego języka. localeCompare() w JavaScript, locale.strxfrm() w Pythonie oraz polecenie POSIX sort z LC_COLLATE zapewniają sortowanie uwzględniające lokalizację.
Sortowanie według długości przydaje się, gdy chcesz znaleźć najkrótsze lub najdłuższe wpisy na liście, zidentyfikować wartości odstające w danych wyjściowych logów lub posegregować elementy według złożoności. Sortowanie odwrotne odwraca istniejącą kolejność wierszy bez zmiany ich porządku, co różni się od sortowania alfabetycznego Z-A. Losowe mieszanie przypisuje każdemu wierszowi losowy klucz sortowania, generując inną kolejność przy każdym uruchomieniu. Przełączanie między trybami dla tych samych danych wejściowych jest szybsze niż pisanie jednorazowego skryptu.
Dlaczego warto używać tego sortownika wierszy?
Wklej tekst, wybierz tryb sortowania i uzyskaj wynik natychmiast. Bez konfiguracji wiersza poleceń, bez plików skryptów, bez instalowania pakietów.
Zastosowania sortownika wierszy
Opis trybów sortowania
To narzędzie obsługuje sześć trybów sortowania. Poniższa tabela opisuje każdy tryb, używaną metodę porównywania oraz przykładowy wynik dla listy wejściowej: jabłko, banan, wiśnia, daktyl, figa.
| Tryb | Opis | Metoda JS | Przykładowy wynik |
|---|---|---|---|
| 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 |
Algorytmy sortowania w tle
Gdy wywołujesz Array.sort() w JavaScript, silnik V8 (Chrome, Node.js) używa Timsort od 2019 roku. Inne środowiska wykonawcze korzystają z różnych algorytmów. Poniższa tabela porównuje najczęściej stosowane algorytmy sortowania w standardowych bibliotekach języków programowania. Wszystkie obsługują zadania sortowania wierszy w tym narzędziu w czasie poniżej milisekundy dla typowych danych wejściowych (do 100 000 wierszy).
| Algorytm | Używany przez | Czas | Uwagi |
|---|---|---|---|
| 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 |
Przykłady kodu
Sortuj wiersze programowo w JavaScript, Pythonie, Go i z wiersza poleceń. Każdy przykład obejmuje sortowanie alfabetyczne, według długości i odwrotne.
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