TopStudy

Tin học · Lớp 11

Giải SGK Chuyên đề Tin học 11 Bài 9. Sắp xếp trộn

14 câu · 21 phút · Ngân hàng đề TopStudy. Đáp án và lời giải do TopStudy biên soạn, mở ngay dưới từng câu.

Làm bài

Nội dung đề

Phần I. Tự luận

Câu 1

1 điểm

Ta đã biết tìm kiếm nhị phân trên các dãy đã sắp xếp có độ phức tạp thời gian tốt hơn so với các thuật toán tìm kiếm trên dãy chưa sắp xếp. Chính vì thế, việc sắp xếp thông tin theo một trình tự nào đó luôn đóng vai trò quan trọng trong các bài toán tìm kiếm thông tin. Tuy nhiên, một số thuật toán sắp xếp mà em đã biết như sắp xếp chèn, sắp xếp chọn, sắp xếp nổi bọt, ... đều có độ phức tạp thời gian O (n2{n}^{2}) (n - kích thước dãy cần sắp xếp). Câu hỏi đặt ra là: Liệu có hay không một cách sắp xếp dãy với thời gian tốt hơn O (n2{n}^{2})?

Liệu kĩ thuật chia để trị có thể áp dụng cho bài toán sắp xếp được không? Nếu có thì có làm tăng hiệu quả của sắp xếp được không?

Xem đáp án và lời giải

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Kỹ thuật chia để trị có thể được áp dụng cho bài toán sắp xếp, và thực tế nó đã được sử dụng để thiết kế các thuật toán sắp xếp hiệu quả như QuickSort và MergeSort.

Tuy nhiên, trong thực tế, cách tiếp cận này không phải lúc nào cũng làm tăng hiệu quả của thuật toán sắp xếp. QuickSort và MergeSort, mặc dù sử dụng phương pháp chia để trị, thường là những thuật toán có hiệu quả cao. Nhưng nếu áp dụng phương pháp chia để trị cho một thuật toán sắp xếp khác như BubbleSort hoặc InsertionSort, chẳng hạn, thì không có nhiều lợi ích. Trong những trường hợp đó, việc sử dụng phương pháp chia để trị có thể làm giảm hiệu quả của thuật toán sắp xếp.

Câu 2

1 điểm

Quan sát và thực hiện các bước theo ý tưởng của thuật toán sắp xếp trộn để biết thuật toán này là mô hình kĩ thuật chia để trị.

Em có nhận xét gì về đặc thù của các giai đoạn 1, 2, 3 trong sơ đồ dưới đây.

Hình minh hoạ

Xem đáp án và lời giải

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Đặc thù của 3 giai đoạn là: Chia nhỏ dãy gốc thành các dãy với kích thước nhỏ hơn (bằng 12\frac{1}{2} dãy ban đầu), tiếp tục cho đến khi nhận được các dãy con đã sắp xếp đúng thì
tiến hành trộn các dãy này để nhận được kết quả cuối cùng.

Câu 3

1 điểm
Hãy thực hiện thao tác trộn hai dãy sau: B = 1, 4, 7; C = 2, 3, 6.
Xem đáp án và lời giải

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Để trộn hai dãy số B và C, ta có thể sử dụng phương pháp trộn hai mảng đã được sắp xếp. Ý tưởng của phương pháp này là tạo ra một mảng mới D có độ dài bằng tổng độ dài của hai mảng B và C, và sau đó lần lượt chọn phần tử nhỏ nhất trong hai mảng B và C để đưa vào mảng D cho đến khi hai mảng B và C đều đã được chọn hết và thu được mảng D gồm các số sắp xếp theo thứ tự tăng dần như sau: D = 1, 2, 3, 4, 6, 7

Câu 4

1 điểm
Thực hiện sắp xếp dãy 3, 2, 7, 1, 6, 5 theo các bước tương tự trên.
Xem đáp án và lời giải

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Hình minh hoạ

Câu 5

1 điểm
Cùng thực hiện các bước cụ thể triển khai ý tưởng và cài đặt chương trình cho thuật toán sắp xếp trộn
Xem đáp án và lời giải

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

- Các bước sắp xếp trộn (merge sort) như sau:

1. Nếu mảng chỉ có một phần tử hoặc không có phần tử nào, thì mảng đó đã được sắp xếp và ta không cần phải làm gì thêm.

2. Chia mảng thành hai phần bằng cách tìm chỉ số giữa (midpoint).

3. Đệ quy sắp xếp phần đầu tiên của mảng (từ đầu đến giữa).

4. Đệ quy sắp xếp phần thứ hai của mảng (từ giữa đến cuối).

5. Trộn (merge) hai phần đã được sắp xếp thành một mảng mới. Khi trộn, ta so sánh phần tử đầu tiên của từng mảng và chọn phần tử nhỏ hơn để đưa vào mảng mới. Sau đó, ta lặp lại quá trình này cho đến khi hết phần tử trong một trong hai mảng. Cuối cùng, ta đưa tất cả các phần tử còn lại của mảng còn lại vào mảng mới.

6. Trả về mảng đã được sắp xếp.

Các bước này sẽ được lặp lại cho đến khi tất cả các phần tử của mảng đã được sắp xếp.

- Cài đặt:

Hình minh hoạ

Hình minh hoạ

Câu 6

1 điểm
Trong chương trình 1 (trộn hai dãy B, C), vòng lặp tại dòng 6 có nhiều nhất là bao nhiêu bước lặp?
Xem đáp án và lời giải

Câu 7

1 điểm
Mô tả các bước thực hiện chương trình 2 nếu dãy gốc A chỉ có một phần tử.
Xem đáp án và lời giải

Câu 8

1 điểm
Phân tích, trao đổi, thảo luận để tính độ phức tạp thời gian của thuật toán sắp xếp trộn.
Xem đáp án và lời giải

Câu 9

1 điểm
Tính thời gian chạy của thuật toán sắp xếp trộn nếu A = [3, 1].
Xem đáp án và lời giải

Câu 10

1 điểm
Mô tả thực hiện các bước của sắp xếp trộn với dãy A = [5, 1, 7, 4]. Trường hợp này T(4) sẽ được tính như thế nào?
Xem đáp án và lời giải

Câu 11

1 điểm

Viết chương trình thực hiện công việc sau:

- Dữ liệu được nhập từ tệp văn bản Data.inp bao gồm hai dòng, mỗi dòng là một dãy các số nguyên đã được sắp xếp theo thứ tự tăng dần, các số cách nhau bởi dấu cách. Hai dãy này có thể không bằng nhau về kích thước.

- Chương trình sẽ thực hiện trộn hai dãy trên và đưa kết quả dãy được trộn ra tệp Data.out theo một hàng ngang.

Xem đáp án và lời giải

Câu 12

1 điểm
Viết lại chương trình hoàn chỉnh thực hiện sắp xếp trộn với dãy A cho trước trên một tệp văn bản. Kết quả đưa ra màn hình.
Xem đáp án và lời giải

Câu 13

1 điểm
Viết chương trình hoàn chỉnh nhập dãy số bất kì từ tệp văn bản, sau đó tiến hành sắp xếp dãy số này theo hai cách khác nhau, cách 1 là một trong các thuật toán sắp xếp đã biết, cách 2 là sắp xếp trộn. Đo thời gian chạy thực sự của hai cách trên, so sánh và kết luận về ưu điểm của sắp xếp trộn.
Xem đáp án và lời giải

Câu 14

1 điểm

Viết lại thuật toán sắp xếp trộn theo cách thực hiện trực tiếp trên dãy số A cho trước, cụ thể như sau.

- Thủ tục trộn sẽ có dạng sau: merge(A,left,mid,right). Thủ tục này sẽ trộn hai phân đoạn của dãy A là A[left], ...., A[mid] và A[mid + 1]..... A[right]. Hai phân đoạn này phải được sắp xếp đúng trước đó.

- Thuật toán chính có dạng mergeSoft(A, left, right) như sau:

Hình minh hoạ

- Lệnh gọi hàm đệ quy là:

Hình minh hoạ

Xem đáp án và lời giải

Đề cùng chủ đề

Tất cả đề Chuyên đề 2. Thực hành thiết kế thuật toán theo kĩ thuật chia để trị · Các bộ sách Tin học Lớp 11