Skip to main content

Bubble Sort

Cập nhật: 2026-08-10

Mục lục


1. Ý tưởng của Bubble Sort

Bubble Sort lặp qua mảng nhiều lượt, ở mỗi lượt so sánh từng cặp phần tử liền kề — nếu phần tử trước lớn hơn phần tử sau thì hoán đổi chúng. Sau mỗi lượt, phần tử lớn nhất còn lại sẽ "nổi" dần về cuối mảng, giống bong bóng nổi lên mặt nước — đó cũng là lý do tên gọi Bubble Sort.

Phiên bản tối ưu sẽ dừng sớm (break) ngay khi một lượt quét không còn hoán đổi nào — nghĩa là mảng đã sắp xong, không cần quét thêm.

2. Xem thuật toán chạy từng bước

Bấm Chạy để xem animation tự động, hoặc dùng Lùi / Tiến để đi qua từng bước một. Cột màu cam là cặp liền kề đang được so sánh, cột màu xanh mint là phần đã "chốt" ở cuối mảng.

SORTING · TRỰC QUAN HOÁ

Bubble Sort

LƯỢT 1/8SO SÁNH 0/44HOÁN ĐỔI 0/28
0
i
1
 
2
 
3
 
4
 
5
 
6
 
7
 
8
 
9
 

Bắt đầu lượt 1.

bubble_sort.pyO(n²) time (tốt nhất O(n)) · O(1) space
1for i in range(n):
2 swapped = False
3 for j in range(n - i - 1):
4 if arr[j] > arr[j + 1]:
5 arr[j], arr[j + 1] = arr[j + 1], arr[j]
6 swapped = True
7 if not swapped:
8 break
Bước 1/169

3. Độ phức tạp

Bubble Sort
Thời gian (xấu nhất / trung bình)O(n²)
Thời gian (tốt nhất, mảng đã sắp xếp)O(n) — nhờ dừng sớm
Bộ nhớ phụO(1)
Ổn định (stable)

Bubble Sort hiếm khi được dùng trong thực tế vì chậm hơn hẳn Selection Sort hay Insertion Sort ở hầu hết trường hợp, nhưng vẫn là thuật toán kinh điển để nhập môn khái niệm so sánh — hoán đổi và độ phức tạp O(n²).