Line Sorter
Сортировка строк по алфавиту, по длине, обратная или случайная сортировка
Входные строки
Отсортированные строки
Что такое сортировка строк?
Сортировка строк — это процесс перестановки строк текстового блока по определённому правилу: алфавитному порядку, обратному порядку, длине строки или случайному перемешиванию. Онлайн-сортировка строк — распространённая задача при работе с лог-файлами, данными CSV, списками настроек или любым текстовым содержимым, где важен порядок. Операция разбивает текст по символам новой строки, применяет функцию сравнения к полученному массиву и объединяет отсортированные строки обратно.
Большинство языков программирования сортируют строки с использованием лексикографического сравнения по умолчанию, которое сравнивает символы по их кодовым точкам Unicode. Это означает, что символы верхнего регистра сортируются раньше строчных («Banana» перед «apple»), а цифры — раньше букв. Локаль-зависимая сортировка, иногда называемая естественной сортировкой или коллацией, устраняет это, применяя языковые правила. Методы JavaScript localeCompare(), Python locale.strxfrm() и POSIX-команда sort с LC_COLLATE обеспечивают локаль-зависимый порядок.
Сортировка по длине полезна, когда нужно найти самые короткие или длинные записи в списке, выявить выбросы в лог-выводе или упорядочить элементы по сложности. Обратная сортировка переворачивает текущий порядок строк без переупорядочивания — это отличается от алфавитной сортировки Z-A. Случайное перемешивание присваивает каждой строке случайный ключ сортировки, создавая разный порядок при каждом запуске. Переключение между режимами на одном вводе быстрее, чем написание одноразового скрипта.
Зачем использовать этот инструмент?
Вставьте текст, выберите режим сортировки и мгновенно получите результат. Никаких настроек командной строки, скриптов или установки пакетов.
Сценарии использования Line Sorter
Справочник по режимам сортировки строк
Инструмент поддерживает шесть режимов сортировки. В таблице ниже описан каждый режим, используемый метод сравнения и пример результата для входного списка: яблоко, банан, вишня, финик, инжир.
| Режим | Описание | Метод 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