Binary Search Animation
Tìm kiếm nhị phân chạy từng bước, ba con trỏ lo / mid / hi lướt trên mảng — sẵn sàng cho bài giảng, slide và blog
.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
Tìm kiếm nhị phân dễ hiểu nhất khi bạn tận mắt thấy nó vứt đi một nửa mảng. Animation này
chạy đúng hàm binarySearch và lowerBound trên trang thuật toán miễn phí, từng bước một: lo,
mid và hi lướt trên dãy ô đã sắp xếp, mỗi lần so arr[mid] vs target đều hiện rõ, nửa không
thể chứa đáp án mờ đi và chìm xuống, còn dòng code đang chạy sáng lên ngay bên cạnh. Có giá trị
cần tìm thì ô đó phát sáng và bung pháo hoa. Không có thì một vệt sáng chỉ đúng chỗ nó sẽ được
chèn vào.
- Hai hàm, một nút chuyển: khoảng đóng
[lo, hi]củabinarySearchvà khoảng nửa mở[lo, hi)củalowerBound - Đếm số bước so với trường hợp tệ nhất ⌈log₂(n + 1)⌉, kèm thanh đo cho thấy 15 → 7 → 3 → 1
- Bấm vào một ô hoặc gõ số bất kỳ để tìm; mảng ngẫu nhiên theo seed, hoặc dữ liệu của bạn, có phần tử trùng cũng được
- Trình phát đầy đủ với thanh kéo và tốc độ 0.5×–4×, đẹp khi chiếu slide hay quay video
- Mọi màu sắc, bo góc, font chữ và thời gian đều là CSS custom property; sáng tối theo trang của bạn
- Không cần cài gì: một file CSS và một script, hoặc một component React
Tính năng · 9
- Diễn lại đúng binarySearch và lowerBound như trên trang thuật toán miễn phí, có nút chuyển qua lại giữa hai hàm
- lo, mid, hi lướt trên các ô; nửa không thể chứa giá trị cần tìm mờ đi và chìm xuống
- Mỗi phép so sánh hiện rõ (arr[mid] vs target), có chú thích bằng lời dễ hiểu và dòng code đang chạy được tô sáng
- Tìm thấy: ô phát sáng và bung pháo hoa. Không thấy: một vệt sáng chỉ đúng chỗ giá trị sẽ được chèn vào
- Đếm số bước so với trường hợp tệ nhất ⌈log₂(n + 1)⌉, kèm thanh đo vùng tìm kiếm co lại một nửa sau mỗi bước
- Trình phát: chạy, dừng, lùi, tiến từng bước, về đầu, kéo thanh thời gian, tốc độ 0.5×–4×, tuỳ chọn lặp lại
- Chọn giá trị cần tìm bằng cách bấm vào một ô hoặc gõ số bất kỳ; đổi kích thước, tạo mảng ngẫu nhiên theo seed hoặc dùng dữ liệu của bạn
- Bản HTML/CSS/JS thuần và bản React (dùng được với Next.js), đủ sáng và tối
- Không phụ thuộc thư viện, khoảng 13 KB sau gzip (cả script lẫn CSS)
Cách dùng
Nhúng stylesheet và script một lần, rồi đặt một phần tử rỗng có data-binary-search-animation
ở bất cứ chỗ nào bạn muốn có trình phát:
<link rel="stylesheet" href="binary-search-animation.css" />
<script src="binary-search-animation.js" defer></script>
<div class="binary-search-animation" data-binary-search-animation></div>
<div
class="binary-search-animation"
data-binary-search-animation
data-binary-search-animation-mode="lower-bound"
data-binary-search-animation-values="2 2 2 3 3 5 5"
data-binary-search-animation-target="3"
></div>Tuỳ chọn qua data attribute, đều bắt đầu bằng data-binary-search-animation-:
| Attribute | Mặc định | Tác dụng |
|---|---|---|
-mode |
binary-search |
binary-search hoặc lower-bound |
-values |
ngẫu nhiên | Dãy số của bạn, cách nhau bằng dấu cách hoặc dấu phẩy (tự được sắp xếp) |
-target |
lấy từ mảng | Giá trị cần tìm |
-size |
15 |
Số phần tử của mảng ngẫu nhiên (1–40) |
-seed |
7 |
Chọn mảng ngẫu nhiên nào: cùng seed luôn ra cùng một mảng |
-speed |
1 |
Từ 0.25 đến 4 |
-autoplay |
true |
Tự chạy khi tải xong (không bao giờ tự chạy khi bật giảm chuyển động) |
-loop |
false |
Dừng một chút ở kết quả rồi chạy lại từ đầu |
-code |
true |
false để ẩn khung code |
-inputs |
true |
false để ẩn hàng nhập liệu (chọn hàm, giá trị cần tìm, kích thước, mảng mới) |
Phần tử thêm vào sau khi trang đã tải: gọi BinarySearchAnimation.init(container), hàm này trả về
một hàm để gỡ bỏ. Muốn điều khiển toàn bộ thì dùng
BinarySearchAnimation.createBinarySearchAnimation(element, options): nó trả về một handle có
setTarget, setMode, setValues, shuffle, player (play, pause, seek…) và destroy.
Chép BinarySearchAnimation.tsx, binary-search-animation.css và thư mục core vào dự án:
import { BinarySearchAnimation } from "./BinarySearchAnimation";
<BinarySearchAnimation />
<BinarySearchAnimation mode="lower-bound" values={[2, 2, 2, 3, 3, 5, 5]} target={3} autoplay={false} />
<BinarySearchAnimation seed={42} size={31} loop inputs={false} onFrame={(frame) => console.log(frame.caption)} />Props chính là các tuỳ chọn ở trên viết kiểu camelCase (mode, values, target, size,
seed, speed, autoplay, loop, code, inputs), thêm onFrame(frame, index) được gọi mỗi
khi vẽ một khung hình. Đổi một prop là tìm kiếm chạy lại từ đầu. Mọi prop khác được truyền xuống
thẻ <div> gốc (className, id, aria-*…). Dùng được với React 18 hoặc 19.
File 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 thì không cần làm gì thêm. Với Pages Router, chuyển dòng import CSS vào pages/_app.
Đặt các biến này trên .binary-search-animation (hoặc class của riêng bạn):
| Biến | Thay đổi gì |
|---|---|
--bsearch-lo, --bsearch-mid, --bsearch-hi |
Màu ba con trỏ (xanh ngọc, tím, hồng) và thanh vùng tìm kiếm nằm giữa chúng |
--bsearch-found, --bsearch-insert |
Ánh sáng của ô tìm thấy, và vệt chỉ chỗ chèn giá trị còn thiếu |
--bsearch-bg, --bsearch-surface, --bsearch-surface-strong, --bsearch-blur |
Nền và lớp kính mờ |
--bsearch-edge, --bsearch-shadow, --bsearch-code-bg |
Viền, bóng đổ, nền khung code |
--bsearch-text, --bsearch-muted, --bsearch-on-accent, --bsearch-ring |
Chữ, chữ phụ, chữ trên con trỏ và nút có màu, viền focus |
--bsearch-font, --bsearch-mono |
Font cho chữ và cho code, con số |
--bsearch-radius, --bsearch-box-radius |
Bo góc của trình phát và của các ô |
--bsearch-duration, --bsearch-ease |
Con trỏ lướt và nửa mảng mờ đi nhanh hay chậm, mượt đến đâu |
Màu dùng light-dark() nên tự theo color-scheme của trang. Khi bật prefers-reduced-motion,
không có gì tự chạy và khung hình đổi ngay lập tức; mọi nút điều khiển vẫn dùng được.
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 binarySearch and lowerBound animation with gliding lo / mid / hi pointers, live code, a step counter, player controls, light and dark.
- 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.

