Sắp xếp nổi bọt (Bubble Sort) là một trong những thuật toán sắp xếp đơn giản nhất. Dù không phải là phương pháp tối ưu cho dữ liệu lớn nhưng nó rất hữu ích để hiểu về cách hoạt động của các thuật toán sắp xếp.
1. Nguyên Lý Hoạt Động
Thuật toán sắp xếp nổi bọt hoạt động bằng cách duyệt qua danh sách nhiều lần, so sánh từng cặp phần tử liền kề và hoán đổi chúng nếu phần tử trước lớn hơn phần tử sau. Quá trình này lặp lại cho đến khi danh sách được sắp xếp hoàn toàn.
Các bước thực hiện
- Duyệt qua danh sách từ đầu đến cuối.
- 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, hoán đổi chúng.
- Lặp lại quá trình này cho đến khi không còn hoán đổi nào diễn ra.
Mỗi vòng lặp sẽ đưa phần tử lớn nhất (hoặc nhỏ nhất) về đúng vị trí của nó, giống như những bong bóng lớn nổi lên mặt nước, do đó có tên gọi “sắp xếp nổi bọt”.
2. Code Mẫu
Dưới đây là cách triển khai thuật toán sắp xếp nổi bọt bằng Python
Giải thích
- Biến
swapped
giúp tối ưu thuật toán bằng cách kiểm tra nếu không có hoán đổi nào diễn ra trong một vòng lặp, nghĩa là danh sách đã được sắp xếp và có thể dừng thuật toán sớm. - Ở mỗi lần lặp, phần tử lớn nhất “nổi” lên cuối danh sách, nên phạm vi duyệt (
n-1-i
) giảm dần theo mỗi vòng lặp.
3. Độ Phức Tạp
Trường hợp | Độ phức tạp |
---|---|
Tệ nhất (Worst-case) | O(n²) |
Trung bình (Average-case) | O(n²) |
Tốt nhất (Best-case, khi danh sách đã sắp xếp) | O(n) |
- Trường hợp tệ nhất và trung bình: Khi danh sách ngẫu nhiên hoặc ngược thứ tự, thuật toán phải thực hiện khoảng n²/2 lần so sánh.
- Trường hợp tốt nhất: Khi danh sách đã được sắp xếp, chỉ cần n lần kiểm tra mà không có hoán đổi nào, thuật toán dừng sớm.
4. Khi Nào Nên Dùng Sắp Xếp Nổi Bọt
Mặc dù có độ phức tạp cao, sắp xếp nổi bọt vẫn hữu ích trong một số trường hợp
- Dữ liệu nhỏ: Khi danh sách có ít phần tử, thuật toán này dễ triển khai và đủ nhanh.
- Dữ liệu gần như đã được sắp xếp: Với tối ưu kiểm tra hoán đổi, nó có thể hoàn thành trong O(n) thay vì O(n²).
- Giáo dục: Là một thuật toán đơn giản, dễ hiểu, giúp người mới học lập trình nắm bắt được khái niệm sắp xếp.
Sắp xếp nổi bọt là một thuật toán cơ bản khá dễ hiểu nhưng không hiệu quả cho dữ liệu lớn. Dù vậy, nó vẫn có những ứng dụng trong các trường hợp đặc biệt. Nếu cần sắp xếp nhanh hơn thì có thể sử dụng Quick Sort hay Merge Sort hoặc Heap Sort, tùy vào yêu cầu cụ thể.