Hai phép thay từ bài trước
Giữ hai tệp giả và chương trình ở L23–L24. Với `kho_b22.py`, dùng **sắp chọn tăng** ở L19 thay sắp chèn tăng; vẫn phải in `[1, 3, 5, 7]`. Với `diem_b22.py`, dùng **nổi bọt giảm** ở L22 thay sắp chọn giảm; vẫn phải in `[9.0, 9.0, 7.0, 6.5]`. Mục tiêu là thấy cùng yêu cầu đầu ra có thể giải bằng các thuật toán khác nhau, chứ không đổi cả dữ liệu hay chiều sắp.
Thay hàm, chạy lại, so kết quả
Trong `kho_b22.py`, thay định nghĩa hàm cũ bằng định nghĩa `sap_chon_tang` ở L19 và thay lời gọi thành `sap_chon_tang(so_luong)`. Không thay phần đọc tệp hay `print(so_luong)`. Trong `diem_b22.py`, thay hàm cũ bằng `sap_noi_bot_giam` ở L22 và gọi `sap_noi_bot_giam(diem)`; giữ phần đọc tệp. Chạy lần lượt hai tệp mã rồi so với hai đầu ra dự kiến ở trên. Nếu báo `NameError`, kiểm đã chép định nghĩa hàm vào cùng tệp và tên gọi viết đúng. Nếu kết quả bị đảo chiều, kiểm dấu `<`/`>` trong hàm mới, không sửa điểm hoặc số lượng để “khớp” kết quả.
Đầu ra là điều kiện cần giữ
Sắp chọn tăng tìm số **nhỏ nhất** của đoạn còn lại, trong khi nổi bọt giảm đổi cặp khi số bên trái **nhỏ hơn** số bên phải. Cả hai khác hàm ở nhiệm vụ gốc, nhưng thứ tự đầu ra vẫn đúng. Bài này không kết luận thuật toán nào nhanh hơn từ một tệp bốn dòng; thời gian chạy cần được đánh giá với dữ liệu và cách đo phù hợp.
Bài luyện
Đổi bài kho từ sắp chèn tăng sang sắp chọn tăng, kết quả đúng phải là gì?
Đổi thuật toán, không đổi yêu cầu sắp tăng.
Đây là giảm.
Đây là dữ liệu ban đầu.
3 và 5 sai thứ tự.
Lời giải
Cả sắp chèn tăng và sắp chọn tăng đều phải trả thứ tự tăng của bốn số: [1,3,5,7].
Bài luyện
Khi đổi bài điểm sang nổi bọt giảm, cặp kề `[7.0,9.0]` phải được xử lí thế nào?
Giảm dần cần số lớn đứng trước.
7.0<9.0 nên nổi bọt giảm đổi hai số.
Sắp xếp không xóa dữ liệu.
Sắp xếp không cộng điểm.
Lời giải
Điều kiện của nổi bọt giảm là số trái nhỏ hơn số phải; cặp [7.0,9.0] phải đổi thành [9.0,7.0].
Bài luyện
Nếu chương trình báo `NameError: name sap_chon_tang is not defined` sau khi đổi lời gọi, cần kiểm gì?
Lời gọi cần một hàm cùng tên đã được định nghĩa.
Dữ liệu âm không tạo định nghĩa hàm.
Xóa phần đọc làm thiếu đầu vào.
In và nhập không sửa NameError này.
Lời giải
NameError cho biết Python chưa biết tên hàm được gọi. Cần thêm định nghĩa sap_chon_tang vào tệp và kiểm chính tả lời gọi.
Đang học