btvn.vn
Tìm kiếm Đăng nhập

Sắp chèn và nổi bọt theo thứ tự giảm

Lưu trên thiết bị này
Kĩ thuật lập trình — CS · Chọn bài khác

Đổi chiều so sánh ở đúng nơi

Ở sắp chèn tăng, những số **lớn hơn** giá trị đang chèn được dịch sang phải. Muốn sắp giảm, dịch những số **nhỏ hơn** để số lớn ở trước. Ở nổi bọt tăng, cặp `a[j] > a[j+1]` bị đổi để số lớn sang phải; muốn giảm, đổi khi `a[j] < a[j+1]` để số lớn sang trái. Giữ nguyên cách tính chỉ số và giới hạn vòng lặp.

Hai hàm sắp giảm

```python def sap_chen_giam(a): for i in range(1, len(a)): gia_tri = a[i] j = i - 1 while j >= 0 and a[j] < gia_tri: a[j + 1] = a[j] j -= 1 a[j + 1] = gia_tri return a def sap_noi_bot_giam(a): n = len(a) for i in range(n - 1): for j in range(n - 1 - i): if a[j] < a[j + 1]: a[j], a[j + 1] = a[j + 1], a[j] return a goc = [4, 1, 6, 3, 6] print(sap_chen_giam(goc.copy())) print(sap_noi_bot_giam(goc.copy())) ``` Hai dòng đều in `[6, 6, 4, 3, 1]`. `copy()` tạo hai danh sách riêng vì mỗi hàm sửa tại chỗ; nếu dùng cùng một danh sách thì hàm thứ hai nhận dữ liệu đã được sắp. Hai số 6 vẫn được giữ đủ. Dãy rỗng và dãy một phần tử không cần đổi chỗ. Với bản sắp chọn giảm ở L21, ba cách sắp giảm trong phần vận dụng SGK đã được thực hiện.

Bài luyện

Trong sắp chèn giảm, khi nào dịch `a[j]` sang phải?
Chọn một đáp án

Bài luyện

Trong nổi bọt giảm, cặp `[2, 5]` kề nhau được xử lí thế nào?
Chọn một đáp án

Bài luyện

Vì sao ví dụ dùng `goc.copy()` cho mỗi hàm sắp?
Chọn một đáp án

Đang học