Line Sorter
Сортуйте рядки в алфавітному порядку, за довжиною, у зворотному порядку або випадково
Вхідні рядки
Відсортовані рядки
Що таке сортування рядків?
Сортування рядків — це процес переупорядкування рядків текстового блоку відповідно до певного правила: алфавітного порядку, зворотного порядку, довжини рядка або випадкового перемішування. Сортування рядків онлайн є поширеним завданням під час роботи з лог-файлами, даними CSV, списками конфігурацій або будь-яким текстовим вмістом, де порядок має значення. Операція розбиває текст за символами нового рядка, застосовує функцію порівняння до отриманого масиву і знову об'єднує відсортовані рядки.
Більшість мов програмування сортують рядки за замовчуванням за лексикографічним порівнянням, яке порівнює символи за їхніми кодовими точками Unicode. Це означає, що великі літери сортуються перед малими («Banana» перед «apple»), а цифри — перед літерами. Сортування з урахуванням локалі, яке інколи називають природним сортуванням або зіставленням, виправляє це за допомогою мовних правил. localeCompare() у JavaScript, locale.strxfrm() у Python і команда POSIX sort з LC_COLLATE забезпечують впорядкування з урахуванням локалі.
Сортування за довжиною корисне, коли потрібно знайти найкоротші або найдовші записи в списку, виявити аномалії у виведенні логів або впорядкувати елементи за складністю. Зворотнє сортування перевертає поточний порядок рядків без переупорядкування, що відрізняється від алфавітного сортування Z-A. Випадкове перемішування присвоює кожному рядку випадковий ключ сортування, що дає різний порядок при кожному запуску. Перемикання між режимами на одному вхідних даних швидше, ніж написання одноразового скрипту.
Навіщо використовувати цей сортувальник рядків?
Вставте текст, оберіть режим сортування й отримайте результат миттєво. Без налаштування командного рядка, без файлів скриптів, без встановлення пакетів.
Сценарії використання сортувальника рядків
Довідник режимів сортування рядків
Цей інструмент підтримує шість режимів сортування. У таблиці нижче описано кожен режим, метод порівняння та приклад результату для вхідного списку: яблуко, банан, вишня, фінік, інжир.
| Режим | Опис | Метод JS | Приклад виведення |
|---|---|---|---|
| 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 |
Алгоритми сортування під капотом
Коли ви викликаєте Array.sort() у JavaScript, рушій V8 (Chrome, Node.js) використовує Timsort починаючи з 2019 року. Інші середовища виконання використовують різні алгоритми. У таблиці нижче порівнюються найпоширеніші алгоритми сортування, що застосовуються у стандартних бібліотеках мов програмування. Всі вони справляються з робочими навантаженнями сортування рядків у цьому інструменті менш ніж за мілісекунду для типових вхідних даних (до 100 000 рядків).
| Алгоритм | Використовується в | Складність | Примітки |
|---|---|---|---|
| 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 |
Приклади коду
Сортуйте рядки програмно у JavaScript, Python, Go та командному рядку. Кожен приклад охоплює алфавітне, за довжиною та зворотнє сортування.
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