Sắp xếp nổi bọt¶
Tóm lược nội dung
Bài này trình bày thuật toán sắp xếp nổi bọt.
Bài toán và thuật toán sắp xếp¶
Tương tự bài học trước, ta chỉ xét bài toán đơn giản là sắp xếp mảng một chiều các số nguyên theo thứ tự tăng dần.
Về thuật toán, bài học này đề cập thuật toán sắp xếp nổi bọt.
Sắp xếp nổi bọt¶
Ý tưởng¶
Hãy tưởng tượng hình ảnh các bọt nước ở dưới đáy nổi dần lên trên bề mặt.
Khi ở dưới đáy, bọt nước có kích thước nhỏ và khi đến gần bề mặt, bọt nước có kích thước lớn dần.
Nếu xem đầu mảng là đáy nước và cuối mảng là bề mặt, ta sắp xếp mảng bằng cách lần lượt cho các phần tử lớn hơn "nổi lên" bề mặt. Cụ thể như sau:
Thuật toán sắp xếp nổi bọt
Cho i
chạy từ đầu đến áp cuối, lặp thao tác:
-
Duyệt từng phần tử
A[j]
của mảng con từ vị trí0
đến vị trí trướci
phần tử cuối, tức vị trí trướcn – 1 – i
, thực hiện:So sánh và hoán vị hai phần tử cạnh nhau
A[j]
vàA[j + 1]
sao cho phần tử nhỏ hơn đứng trước và phần tử lớn hơn đứng sau.
Như vậy, sau mỗi lần lặp của vòng lặp trong (biến j
), các phần tử lớn sẽ trôi về phía cuối mảng, và sau mỗi lần lặp của vòng lặp ngoài (biến i
), phần tử lớn nhất sẽ về đúng vị trí của nó ở cuối mảng.
Có thể thấy, với mỗi lần lặp tiếp theo của vòng lặp ngoài (biến i
), phạm vi duyệt sẽ thu nhỏ lại, từ đầu mảng cho đến trước phần tử lớn nhất của lần duyệt trước đó.
Minh hoạ¶
Lưu đồ¶
Trực quan hoá¶
Viết chương trình¶
Khai báo thư viện numpy
.
Viết hàm bubble_sort()
để thực hiện thuật toán sắp xếp nổi bọt.
Trong chương trình chính, ta gọi hàm bubble_sort()
ra thực hiện sắp xếp mảng Array
.
Output:
Sơ đồ tóm tắt¶
Mã nguồn¶
Các đoạn mã trong bài được đặt tại:
Some English words¶
Vietnamese | Tiếng Anh |
---|---|
hoán vị (hai phần tử) | swap |
sắp xếp nổi bọt | bubble sort |
so sánh | compare |