Quick Sort Animation
Sắp xếp nhanh từng bước: phần tử chốt, hai con trỏ của Hoare và ngăn xếp gọi hàm luôn nông
.zip · HTML / CSS / JS · v1.0.0
Miễn phí — không cần tài khoản hay email. Luôn là bản mới nhất.
Đang chạy trực tiếp
Giới thiệu
Sắp xếp nhanh thì dễ nói mà khó thấy. Trình phát này cho bạn xem từng bước một: ba giá trị mà trung vị của ba nhìn vào, phần tử chốt được chọn, hai con trỏ i và j của Hoare đi về phía nhau, các lần đổi chỗ trượt vào vị trí, rồi điểm chia. Đoạn nào đã xong thì chuyển xanh, và ngăn xếp gọi hàm bên cạnh cho thấy mẹo giữ cho quick sort an toàn: đệ quy vào bên nhỏ, lặp ở bên lớn, nên ngăn xếp không bao giờ sâu quá ⌈log₂ n⌉.
- Chạy đúng đoạn code trên trang Quick Sort, và code đó sáng lên từng dòng theo từng bước
- Mỗi bước có một câu giải thích dễ hiểu ("values[j] = 39 is not above 39: j stops here")
- Đầu vào ngẫu nhiên, đã sắp xếp, sắp xếp ngược hoặc nhiều giá trị trùng từ một seed, hoặc số của bạn
- Phát, đi từng bước, kéo thanh thời gian, đổi tốc độ bằng chuột hoặc bàn phím; lặp lại được cho slide hay video
- Mọi màu, bo góc và thời gian đều là CSS custom property; sáng và tối tự theo trang của bạn
- Không cần cài gì: một file CSS và một script nhỏ, hoặc một component React
Tính năng · 9
- Bám đúng đoạn code trên trang thuật toán: phân hoạch Hoare, chốt trung vị của ba, đệ quy vào bên nhỏ hơn
- Các cột trượt sang chỗ mới khi đổi chỗ; khoảng đang xét, đường chốt, i và j cùng điểm chia hiện ra đúng lúc
- Chính đoạn code của trang, dòng đang chạy sáng lên; ngăn xếp gọi hàm cho thấy mẹo lặp ở bên lớn hơn
- Mỗi bước có một câu giải thích dễ hiểu, kèm số lần so sánh, số lần đổi chỗ và độ sâu ngăn xếp so với ⌈log₂ n⌉
- Phát, dừng, đi từng bước, kéo thanh thời gian, tốc độ 0.5×–4×; có màn ăn mừng nho nhỏ khi mảng đã xếp xong
- Đầu vào ngẫu nhiên, đã sắp xếp, sắp xếp ngược hoặc nhiều giá trị trùng, sinh từ một seed chạy lại được; hoặc dùng số của bạn
- Giao diện aurora tối, sang chế độ sáng vẫn đẹp; vừa điện thoại, bài blog lẫn slide 16:9
- Bản HTML/CSS/JS thuần và bản React (dùng được với Next.js)
- Không phụ thuộc thư viện, khoảng 16 KB sau gzip (cả script lẫn style)
Cách dùng
Nhúng stylesheet và script một lần, rồi đánh dấu một phần tử trống bằng
data-quick-sort-animation. Toàn bộ trình phát được dựng bên trong nó:
<link rel="stylesheet" href="quick-sort-animation.css" />
<script src="quick-sort-animation.js" defer></script>
<div data-quick-sort-animation data-quick-sort-size="16" data-quick-sort-loop></div>
<!-- số của bạn, bỏ các bảng phụ: hợp để đưa lên slide -->
<div
data-quick-sort-animation
data-quick-sort-values="7, 2, 9, 4, 3, 8, 1"
data-quick-sort-inputs="false"
data-quick-sort-panels="false"
></div>Tuỳ chọn qua data attribute (tuỳ chọn bật/tắt: có mặt là bật, ghi "false" là tắt):
| Attribute | Mặc định | Tác dụng |
|---|---|---|
data-quick-sort-values |
— | Dãy số của bạn, cách nhau bằng dấu phẩy hoặc khoảng trắng (tối đa 48); thay cho mảng sinh tự động |
data-quick-sort-size |
16 |
Số cột của mảng sinh tự động, từ 2 đến 48 |
data-quick-sort-scenario |
random |
random, sorted, reversed hoặc duplicates |
data-quick-sort-seed |
7 |
Chọn mảng sinh ra: cùng seed thì luôn ra cùng một mảng |
data-quick-sort-speed |
1 |
Từ 0.25 đến 4 |
data-quick-sort-autoplay |
bật | Tự phát khi tải trang (không bao giờ tự phát khi bật prefers-reduced-motion) |
data-quick-sort-loop |
tắt | Chạy lại từ đầu sau bước cuối |
data-quick-sort-inputs |
bật | Ô chọn số cột, kiểu đầu vào và nút "New input" |
data-quick-sort-panels |
bật | Bảng code và bảng ngăn xếp gọi hàm |
Trình phát thêm vào sau khi trang đã tải: QuickSortAnimation.init(container) — hàm này trả về
một hàm để gỡ lại. Muốn điều khiển từ code của bạn (ví dụ nút bấm chuyển slide), tự dựng nó:
const player = QuickSortAnimation.create(element, { values: [5, 1, 4, 2, 3], autoplay: false });
player.stepForward();
player.seek(20);
player.setValues([9, 8, 7]);
player.destroy(); // trả phần tử về như cũHandle còn có play, pause, stepBack, reset và frameCount.
Khi focus nằm ở bất kỳ đâu trong trình phát: Space phát hoặc dừng, ← / → đi từng bước, Home quay về đầu.
Chép QuickSortAnimation.tsx, quick-sort-animation.css và thư mục core vào dự án:
import { QuickSortAnimation } from "./QuickSortAnimation";
<QuickSortAnimation size={24} scenario="reversed" loop />
<QuickSortAnimation values={[7, 2, 9, 4, 3, 8, 1]} inputs={false} panels={false} />Props chính là các tuỳ chọn ở trên: values, size, scenario, seed, speed, autoplay,
loop, inputs, panels, cộng thêm mọi prop của <div> (className, id, aria-label…). Truyền
một mảng mới nhưng cùng các số thì trình phát không bị chạy lại từ đầu. React 18 hoặc 19.
Component bắt đầu bằng "use client", nên dùng được từ bất kỳ page hay server component nào. Với
App Router không cần làm gì thêm. Với Pages Router, chuyển dòng import CSS sang pages/_app.
Đặt các biến sau trên .quick-sort-animation (hoặc một class của bạn):
| Biến | Thay đổi gì |
|---|---|
--quicksort-surface, --quicksort-panel, --quicksort-stage, --quicksort-border |
Lớp kính, các bảng, khung cột và viền của chúng |
--quicksort-aurora-1, --quicksort-aurora-2, --quicksort-aurora-3 |
Các quầng màu phía sau |
--quicksort-text, --quicksort-muted |
Chữ chính và chữ phụ |
--quicksort-bar, --quicksort-bar-2 |
Dải màu của một cột, từ trên xuống |
--quicksort-pivot, --quicksort-i, --quicksort-j, --quicksort-swap |
Phần tử chốt (và trung vị của ba), hai con trỏ, lần đổi chỗ |
--quicksort-settled, --quicksort-settled-2 |
Cột đã nằm đúng chỗ |
--quicksort-range, --quicksort-on-mark |
Ngoặc khoảng đang xét, và chữ trên các nhãn màu |
--quicksort-accent, --quicksort-accent-2, --quicksort-ring |
Nút phát, thanh thời gian, dòng code đang chạy, viền focus |
--quicksort-radius, --quicksort-bar-radius |
Bo góc |
--quicksort-font, --quicksort-mono |
Font chữ và font code |
--quicksort-stage-height |
Chiều cao tối đa các cột |
--quicksort-duration, --quicksort-ease |
Thời gian một cột trượt ở 1× (tự co giãn theo tốc độ) |
Màu dùng light-dark(): tự theo color-scheme của trang.
Hỏi về sản phẩm này
Chưa chắc có hợp dự án của bạn? Cứ hỏi — câu trả lời lấy từ chính trang này.
Lịch sử phiên bản
1.0.0First releaseMới nhất
Plain HTML/CSS/JS and React builds of a step-by-step quick sort player (Hoare partition, median-of-three pivot, smaller-side recursion) with pseudocode, call stack, counters, seeded inputs, keyboard and reduced-motion support.
- Bản sửa lỗi và tính năng mới đều có ngay ở nút tải này — file tải về luôn là bản mới nhất.
Có thể bạn sẽ thích
- AnimationSắp xếp
Bubble Sort Animation
Bản tương tác của video ngắn: các cột bắt chéo khi đổi chỗ, đuôi đã sắp xếp dài dần và cú thoát sớm
Miễn phí - AnimationSắp xếp
Sorting Race
Sáu thuật toán sắp xếp đua nhau trên cùng một bộ dữ liệu — mỗi nhịp một thao tác, về đích nhận huy chương
Miễn phí



