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

Viết hàm sắp xếp trộn đệ quy

Lưu trên thiết bị này
Chuyên đề lựa chọn CS: Chia để trị · Chọn bài khác

Cơ sở, hai lời gọi và bước trộn

```python def mergeSort(A): if len(A) <= 1: return A k = len(A) // 2 B = mergeSort(A[:k]) C = mergeSort(A[k:]) return merge(B, C) ``` Hàm dùng merge của bài trước. Với k=len(A)//2, A[:k] gồm các chỉ số 0 đến k−1; A[k:] gồm k đến cuối. Hai phần không chồng nhau và không bỏ sót phần tử. Nếu độ dài lẻ, hai phần hơn kém nhau một phần tử. Cơ sở được kiểm trước khi chia nên dãy rỗng hoặc một phần tử không gọi tiếp. Sau khi hai lời gọi trả B,C đã sắp xếp, return merge(B,C) tạo kết quả của cả dãy.

Dãy trả về cần được giữ lại

Với A=[6,2,5,1], k=2. Hai phần [6,2] và [5,1] được sắp thành [2,6] và [1,5]; trộn để nhận [1,2,5,6]. ```python A = [6, 2, 5, 1] B = mergeSort(A) print(B) ``` B là [1,2,5,6], còn A vẫn là [6,2,5,1]. Chỉ gọi mergeSort(A) mà không giữ kết quả chưa làm A thay đổi. Bản này không sửa A; với dãy dài 0 hoặc 1, return A có thể trả chính đối tượng đầu vào, nên không khẳng định mọi lời gọi đều tạo một đối tượng mới.

Bài luyện

A có 5 phần tử, k=2. Hai lát cắt đúng cho mã trong bài là gì?
Chọn một đáp án

Bài luyện

A=[6,2,5,1], thực hiện B=mergeSort(A). Kết luận nào đúng?
Chọn một đáp án

Bài luyện

Vì sao phải kiểm len(A)<=1 trước khi chia?
Chọn một đáp án

Đang học