Giữ vị trí đang xét, so sánh với các vị trí phía sau
Để sắp tăng dần theo cách sắp xếp chọn của bài, bắt đầu ở vị trí 1. Lần lượt so sánh phần tử tại vị trí này với từng phần tử phía sau, từ trái sang phải. Gặp phần tử nhỏ hơn thì **hoán đổi ngay** với phần tử đang ở vị trí 1. Tiếp tục dùng giá trị mới tại vị trí 1 để so sánh.
Cuối vòng, vị trí 1 giữ số nhỏ nhất. Chuyển sang vị trí 2 và làm tương tự với các phần tử phía sau nó. Tiếp tục đến vị trí trước cuối.
Khác với nổi bọt, hai vị trí được so sánh không nhất thiết liền kề. Cần giữ đúng cách đổi ngay đang học khi lập bảng, vì những biến thể sắp xếp chọn khác có thể cho trạng thái trung gian khác.
Bài luyện
Trong một vòng sắp xếp chọn theo bài, cần so sánh những phần tử nào?
Đây là cách so sánh của nổi bọt đang học.
Vị trí đang xét được giữ để so sánh với từng phần tử sau.
Một cặp chưa đủ để biết phần tử nhỏ nhất của cả phần còn lại.
Các vị trí phía trước đã đúng và không thuộc phần cần xét lại.
Lời giải
Mỗi vòng cố định một vị trí và lần lượt xét các vị trí phía sau. Nếu gặp giá trị nhỏ hơn thì đổi ngay, rồi tiếp tục với giá trị mới tại vị trí cố định.
Vòng đầu với dãy 9, 4, 7, 2, 6
Giữ vị trí đang xét là 1, nhưng giá trị tại đó có thể thay đổi sau hoán đổi:
| Vị trí sau | So sánh với vị trí 1 | Dãy sau bước này |
|---|---|---|
| 2 | 4 nhỏ hơn 9: đổi | 4, 9, 7, 2, 6 |
| 3 | 7 không nhỏ hơn 4: giữ | 4, 9, 7, 2, 6 |
| 4 | 2 nhỏ hơn 4: đổi | 2, 9, 7, 4, 6 |
| 5 | 6 không nhỏ hơn 2: giữ | 2, 9, 7, 4, 6 |
Vòng đầu đưa 2 về vị trí 1. Đừng tiếp tục so sánh với số 9 ban đầu sau khi vị trí 1 đã đổi thành 4 rồi thành 2; mỗi bước dùng trạng thái hiện tại.
Bài luyện
Sau khi đổi 9 và 4 ở bước đầu, vị trí 1 giữ 4. Khi xét phần tử 7 ở vị trí 3, cần làm gì?
Phải dùng giá trị hiện tại ở vị trí 1, không dùng lại số 9 đã chuyển đi.
Chỉ đổi khi gặp số nhỏ hơn giá trị đang ở vị trí 1.
Đúng giá trị so sánh và đúng điều kiện hoán đổi.
Sắp xếp không được bỏ dữ liệu.
Lời giải
Vị trí 1 hiện giữ 4. So sánh 7 với 4, vì 7 không nhỏ hơn 4 nên không hoán đổi; dãy vẫn là 4,9,7,2,6.
Bài luyện
Sau vòng đầu của sắp xếp chọn theo ví dụ, dãy nào đúng?
Hai lần đổi đưa giá trị ở vị trí 1 từ 9 thành 4 rồi thành 2.
Đây là kết quả vòng đầu nổi bọt của bài trước.
Đây là kết quả cuối, chưa phải sau vòng đầu.
Dãy này mới sau lần đổi đầu, chưa xét hết các phần tử phía sau.
Lời giải
So sánh với 4 thì đổi, với 7 thì giữ, với 2 thì đổi, với 6 thì giữ. Kết thúc vòng đầu nhận dãy 2,9,7,4,6.
Kiểm từng vòng và giữ dữ liệu đi kèm
Dùng năm thẻ 9, 4, 7, 2, 6 để mô phỏng các vòng còn lại. Ghi dãy sau từng vòng và đối chiếu:
| Sau vòng | Dãy |
|---|---|
| 1 | 2, 9, 7, 4, 6 |
| 2 | 2, 4, 9, 7, 6 |
| 3 | 2, 4, 6, 9, 7 |
| 4 | 2, 4, 6, 7, 9 |
Sau mỗi vòng, thêm một vị trí đầu đã đúng. Đầu ra cuối phải tăng dần và giữ đủ các giá trị. Muốn sắp giảm dần theo cùng cách, hoán đổi khi phần tử phía sau lớn hơn phần tử tại vị trí đang xét.
Khi mỗi số có thông tin đi kèm, cần chuyển cả bản ghi. Ví dụ ba tổ giả định Sao, Trăng, Mây có số cây tương ứng 9, 4, 7. Sắp tăng theo số cây phải nhận Trăng–4, Mây–7, Sao–9. Nếu chỉ đổi cột số mà để tên đứng yên, số cây sẽ bị gán sai tổ.
Hai thuật toán nổi bọt và chọn của bài cùng cho dãy cuối 2, 4, 6, 7, 9, nhưng kết quả sau vòng đầu khác nhau. Vì vậy phải kiểm cả thứ tự so sánh và trạng thái trung gian khi mô phỏng, không chỉ nhìn dãy cuối.
Bài luyện
Sao có 9 cây, Trăng có 4 cây, Mây có 7 cây. Khi sắp theo số cây tăng dần, cách nào giữ đúng dữ liệu?
Cách này gán nhầm số cây cho các tổ.
Thông tin tên phải đi kèm đúng số lượng của tổ.
Sắp xếp không thay giá trị số cây.
Chuyển cả bản ghi giữ đúng quan hệ tên và số lượng.
Lời giải
Thứ tự tăng là 4,7,9 nhưng mỗi số thuộc một tổ cụ thể. Phải chuyển cả cặp dữ liệu để giữ Trăng có 4, Mây có 7 và Sao có 9 cây.
Bài luyện
Nổi bọt và chọn cho cùng một dãy tăng dần ở cuối. Điều nào vẫn cần kiểm khi mô phỏng?
Tên đúng không bảo đảm mô phỏng đúng.
Những bước này cho biết đã thực hiện đúng thuật toán nào.
Số lượng chữ không kiểm hoạt động thuật toán.
Hai cách có thể cho dãy trung gian khác nhau.
Lời giải
Cùng đầu ra không có nghĩa cùng quá trình. Nổi bọt so sánh liền kề từ cuối; chọn so sánh vị trí đang xét với từng vị trí sau. Cần đối chiếu đúng các cặp, điều kiện và trạng thái tương ứng.
Đang học