Sắp xếp tráo đổi¶
Tóm lược nội dung
Bài này trình bày thuật toán sắp xếp tráo đổi.
Khái quát¶
Xem lại khái quát về bài toán và thuật toán sắp xếp tại đây.
Thuật toán sắp xếp tráo đổi¶
Ý tưởng¶
Ý tưởng chính của thuật toán sắp xếp tráo đổi là lặp lại nhiều lần thao tác so sánh phần tử đang xét với các phần tử theo sau nó và tráo đổi (hoán vị) sao cho phần tử nhỏ hơn lên trước và phần tử lớn hơn ra sau.
Cụ thể như sau:
Duyệt từng phần tử A[i] từ đầu đến áp cuối, lặp thao tác:
-
Duyệt từng phần tử
A[j]từi + 1đến cuối mảng, lặp thao tác:So sánh và tráo đổi (hoán vị)
A[i]vàA[j]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 duyệt của vòng lặp ngoài (biến i), phần tử nhỏ nhất của mảng con A[i..n - 1] được đưa về vị trí đầu của mảng con đó, cũng chính là vị trí i.
Thuật toán có thể được phác hoạ như hình sau:
Nói thêm về thuật toán này
Trong một số sách tiếng Anh, sắp xếp tráo đổi thường được xem là "anh em họ" của sắp xếp nổi bọt nhưng hiệu năng kém hơn. Vì thế, người ta cho rằng không đáng để dạy thuật toán này.
Ví dụ minh hoạ¶
Lưu đồ¶
Trực quan hoá¶
Viết chương trình¶
1. Nạp thư viện numpy.
2. Viết hàm exchange_sort() để thực hiện thuật toán sắp xếp tráo đổi.
3. Viết chương trình chính.
Trong chương trình chính, ta tạm thời bỏ qua việc cho người dùng nhập mảng. Thay vào đó, ta khởi tạo mảng cố định, rồi gọi hàm exchange_sort() để sắp xếp mảng Array.
4. Chạy chương trình trên, kết quả như sau:
Mã nguồn¶
Code đầy đủ được đặt tại:
Sơ đồ tóm tắt¶
Some English words¶
| Vietnamese | Tiếng Anh |
|---|---|
| hoán vị (hai phần tử) | swap |
| sắp xếp tráo đổi | exchange sort |
| so sánh | compare |