Bộ sắp xếp dòng

Sắp xếp các dòng theo thứ tự bảng chữ cái, theo độ dài, đảo ngược hoặc ngẫu nhiên

Thử ví dụ

Dòng đầu vào

Dòng được sắp xếp

Chạy cục bộ · An toàn để dán thông tin bí mật
Các dòng được sắp xếp sẽ xuất hiện ở đây…

Sắp Xếp Dòng Là Gì?

Sắp xếp dòng là quá trình sắp xếp lại các dòng trong một khối văn bản theo một quy tắc cụ thể: thứ tự bảng chữ cái, thứ tự ngược, độ dài dòng, hoặc xáo trộn ngẫu nhiên. Sắp xếp dòng trực tuyến là tác vụ phổ biến khi làm việc với tệp log, dữ liệu CSV, danh sách cấu hình, hoặc bất kỳ nội dung văn bản thuần nào có thứ tự quan trọng. Thao tác này tách văn bản theo ký tự xuống dòng, áp dụng hàm so sánh lên mảng kết quả, rồi ghép các dòng đã sắp xếp lại với nhau.

Hầu hết các ngôn ngữ lập trình sắp xếp chuỗi theo thứ tự từ điển (lexicographic) theo mặc định, tức là so sánh ký tự theo giá trị Unicode code point. Điều này có nghĩa là chữ hoa sẽ đứng trước chữ thường ("Banana" trước "apple"), và chữ số đứng trước chữ cái. Sắp xếp có nhận thức về ngôn ngữ (locale-aware), đôi khi gọi là natural sort hoặc collation, khắc phục điều này bằng cách áp dụng các quy tắc riêng của từng ngôn ngữ. localeCompare() trong JavaScript, locale.strxfrm() trong Python, và lệnh POSIX sort với LC_COLLATE đều cung cấp thứ tự có nhận thức về ngôn ngữ.

Sắp xếp theo độ dài hữu ích khi bạn cần tìm các mục ngắn nhất hoặc dài nhất trong danh sách, xác định các giá trị ngoại lệ trong đầu ra log, hoặc sắp xếp các mục theo độ phức tạp. Sắp xếp ngược đảo thứ tự dòng hiện có mà không sắp xếp lại, điều này khác với sắp xếp Z-A theo bảng chữ cái. Xáo trộn ngẫu nhiên gán cho mỗi dòng một khóa sắp xếp ngẫu nhiên, tạo ra thứ tự khác nhau mỗi lần chạy. Chuyển đổi giữa các chế độ trên cùng một đầu vào nhanh hơn nhiều so với việc viết một đoạn script riêng.

Tại Sao Dùng Công Cụ Sắp Xếp Dòng Này?

Dán văn bản của bạn, chọn chế độ sắp xếp và nhận kết quả ngay lập tức. Không cần thiết lập dòng lệnh, không cần tệp script, không cần cài đặt gói.

Sắp Xếp Tức Thì
Kết quả xuất hiện ngay khi bạn gõ hoặc dán. Chuyển đổi giữa sáu chế độ sắp xếp và so sánh đầu ra mà không cần chạy lại bất cứ thứ gì.
🔒
Xử Lý Ưu Tiên Quyền Riêng Tư
Toàn bộ quá trình sắp xếp chạy trong trình duyệt của bạn bằng JavaScript. Văn bản của bạn ở lại trên thiết bị. Không có gì được tải lên máy chủ hay ghi lại.
🔀
Sáu Chế Độ Sắp Xếp
A-Z, Z-A, ngắn nhất trước, dài nhất trước, thứ tự ngược, và xáo trộn ngẫu nhiên. Một đầu vào đáp ứng các tác vụ sắp xếp dòng phổ biến nhất.
📋
Không Cần Tài Khoản
Mở trang và bắt đầu sắp xếp. Không đăng ký, không tiện ích mở rộng, không ứng dụng desktop. Hoạt động trên mọi thiết bị có trình duyệt hiện đại.

Các Trường Hợp Sử Dụng Công Cụ Sắp Xếp Dòng

Phát Triển Frontend
Sắp xếp danh sách class CSS, câu lệnh import, hoặc khóa dịch i18n theo thứ tự bảng chữ cái. Thứ tự nhất quán giảm xung đột merge trong kiểm soát phiên bản và giúp việc review code nhanh hơn.
Kỹ Thuật Backend
Sắp xếp danh sách dependency trong package.json, requirements.txt, hoặc go.mod trước khi commit. Sắp xếp tên cột SQL khi xây dựng câu lệnh CREATE TABLE hoặc so sánh schema diff.
DevOps và Hạ Tầng
Sắp xếp tên biến môi trường trong tệp .env, các mục ConfigMap của Kubernetes, hoặc khối biến Terraform. Thứ tự bảng chữ cái giúp bạn phát hiện các mục trùng lặp và giá trị còn thiếu khi review.
QA và Tự Động Hóa Kiểm Thử
Sắp xếp log đầu ra kiểm thử theo dấu thời gian hoặc thông báo để nhanh chóng phát hiện lỗi. Xáo trộn ngẫu nhiên dữ liệu đầu vào kiểm thử để xác minh rằng hành vi ứng dụng không phụ thuộc vào thứ tự chèn.
Kỹ Thuật Dữ Liệu
Sắp xếp tiêu đề CSV hoặc danh sách cột trước khi viết script migration schema. Sắp xếp các dòng mẫu dữ liệu theo độ dài để tìm các hàng bị cắt ngắn hoặc giá trị bất thường dài trong pipeline dữ liệu.
Sinh Viên và Người Học
Sắp xếp danh sách từ vựng, mục thư mục, hoặc ghi chú học tập theo thứ tự bảng chữ cái. Xáo trộn các dòng thẻ học để ôn tập ngẫu nhiên mà không cần cài thêm ứng dụng.

Tham Chiếu Các Chế Độ Sắp Xếp Dòng

Công cụ này hỗ trợ sáu chế độ sắp xếp. Bảng dưới đây mô tả từng chế độ, phương pháp so sánh được sử dụng, và ví dụ kết quả cho danh sách đầu vào: apple, banana, cherry, date, fig.

Chế ĐộMô TảPhương Thức JSVí Dụ Đầu Ra
A-ZAlphabetical ascendinglocaleCompare()apple, banana, cherry
Z-AAlphabetical descendinglocaleCompare() reversedcherry, banana, apple
Length (short)Shortest line firsta.length - b.lengthfig, date, apple, banana
Length (long)Longest line firstb.length - a.lengthbanana, apple, date, fig
ReverseFlip line order, no reorderingArray.reverse()Last line becomes first
RandomRandomized comparator (biased)Math.random() - 0.5Different every run

Các Thuật Toán Sắp Xếp Đằng Sau

Khi bạn gọi Array.sort() trong JavaScript, V8 engine (Chrome, Node.js) sử dụng Timsort kể từ năm 2019. Các runtime khác dùng các thuật toán khác nhau. Bảng dưới đây so sánh các thuật toán sắp xếp phổ biến nhất được dùng trong thư viện chuẩn của các ngôn ngữ lập trình. Tất cả đều xử lý khối lượng công việc sắp xếp dòng trong công cụ này trong chưa đầy một mili giây với đầu vào thông thường (dưới 100.000 dòng).

Thuật ToánSử Dụng BởiĐộ Phức TạpGhi Chú
TimsortPython, Java (Arrays.sort)O(n log n)Stable, fast on partially sorted data
QuicksortC stdlib, V8 (older)O(n log n)In-place, unstable by default
Merge sortMost stable-sort implementationsO(n log n)Stable, predictable, uses extra memory
IntrosortC++ std::sort, .NETO(n log n)Hybrid: quicksort + heapsort fallback
Radix sortFixed-length keys, integersO(nk)Non-comparative, linear for short keys

Ví Dụ Code

Sắp xếp dòng theo chương trình trong JavaScript, Python, Go, và dòng lệnh. Mỗi ví dụ bao gồm sắp xếp theo bảng chữ cái, theo độ dài, và sắp xếp ngược.

JavaScript
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')
Python
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
Go
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
}
CLI (bash)
# 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

Câu Hỏi Thường Gặp

Sự khác biệt giữa sắp xếp A-Z và natural sort là gì?
Sắp xếp A-Z (lexicographic) so sánh ký tự theo Unicode code point. Điều này có nghĩa là "item10" sẽ đứng trước "item2" vì ký tự '1' có code point thấp hơn '2'. Natural sort coi các số nhúng là giá trị số, nên "item2" đứng trước "item10". Công cụ này sử dụng sắp xếp lexicographic có nhận thức về ngôn ngữ thông qua localeCompare(), xử lý đúng các ký tự có dấu nhưng không thực hiện natural sort với số.
Văn bản của tôi có được gửi lên máy chủ khi sắp xếp dòng không?
Không. Toàn bộ quá trình sắp xếp diễn ra trong trình duyệt của bạn bằng phương thức Array.sort() của JavaScript. Văn bản không bao giờ rời khỏi thiết bị của bạn. Bạn có thể kiểm chứng điều này bằng cách mở tab Network trong DevTools của trình duyệt và xác nhận rằng không có yêu cầu nào được thực hiện khi bạn dán và sắp xếp văn bản.
Công cụ này xử lý được bao nhiêu dòng?
Công cụ hoạt động tốt với hàng chục nghìn dòng. Triển khai Timsort của JavaScript trong V8 xử lý 100.000 dòng trong chưa đầy 100 mili giây trên phần cứng hiện đại. Với các tệp lớn hơn vài megabyte, công cụ dòng lệnh như lệnh sort trên Unix hiệu quả hơn vì nó có thể dùng merge sort dựa trên đĩa và nhiều luồng xử lý.
Sắp xếp không phân biệt chữ hoa/chữ thường hoạt động như thế nào?
Công cụ này sử dụng String.localeCompare() với tùy chọn { sensitivity: 'base' }, giúp so sánh không phân biệt chữ hoa/chữ thường để "Apple" và "apple" được sắp xếp cùng nhau thay vì thành các nhóm riêng biệt. Mặc định, localeCompare() phân biệt chữ hoa/chữ thường; cần tùy chọn rõ ràng để có hành vi không phân biệt. Nếu bạn cần sắp xếp phân biệt chữ hoa/chữ thường nghiêm ngặt với chữ hoa đứng trước, lệnh sort trên Unix không có cờ -f cung cấp hành vi đó.
Tôi có thể sắp xếp dòng và xóa trùng lặp cùng lúc không?
Công cụ này sắp xếp dòng nhưng không xóa trùng lặp. Để xóa các dòng trùng lặp, hãy dùng công cụ Trình xóa dòng trùng lặp trong cùng danh mục. Bạn có thể sắp xếp văn bản ở đây trước, rồi dán kết quả vào công cụ xóa trùng lặp để có danh sách sạch, duy nhất và được sắp xếp.
Sự khác biệt giữa sắp xếp ngược và sắp xếp Z-A là gì?
Sắp xếp ngược đảo thứ tự dòng ban đầu: dòng cuối cùng trở thành dòng đầu tiên, dòng thứ hai từ cuối trở thành dòng thứ hai, và cứ thế tiếp tục. Không có phép so sánh theo bảng chữ cái nào được thực hiện. Sắp xếp Z-A sắp xếp các dòng theo thứ tự bảng chữ cái giảm dần bất kể vị trí ban đầu của chúng. Nếu đầu vào đã được sắp xếp A-Z, kết quả của sắp xếp ngược và Z-A giống nhau, nhưng với đầu vào chưa sắp xếp thì kết quả khác nhau.
Làm thế nào để sắp xếp dòng theo một cột hoặc trường cụ thể?
Công cụ này sắp xếp theo toàn bộ nội dung dòng. Để sắp xếp theo một cột cụ thể (ví dụ, trường thứ hai trong tệp phân tách bằng tab), hãy dùng lệnh sort trên Unix với cờ -k: sort -t$'\t' -k2,2 file.txt. Trong Python, hãy tách từng dòng và dùng hàm key: sorted(lines, key=lambda x: x.split('\t')[1]).