Bài 4: SẮP XẾP TRỘN (MERGE SORT)

Chuyên đề 11.2 - Thực hành thiết kế thuật toán theo kĩ thuật Chia để trị

🎯 Mục tiêu bài học

Về kiến thức

  • Nêu được ý tưởng thiết kế thuật toán sắp xếp trộn theo kĩ thuật Chia để trị.
  • Viết được chương trình có sử dụng kĩ thuật Chia để trị cho thuật toán sắp xếp trộn.

Về phẩm chất

  • Chăm chỉ: Tích cực tìm tòi và sáng tạo trong học tập.

Về năng lực

2.1. Năng lực tin học
  • NLc: Giải quyết vấn đề với sự hỗ trợ của công nghệ thông tin và truyền thông.
  • Trình bày được ý tưởng thiết kế thuật toán sắp xếp trộn theo kĩ thuật Chia để trị.
  • Viết được chương trình có sử dụng kĩ thuật Chia để trị cho thuật toán sắp xếp trộn.
2.2. Năng lực chung
  • Giao tiếp và hợp tác: Làm việc theo nhóm với tinh thần hợp tác.
  • Giải quyết vấn đề và sáng tạo: Đề xuất và phân tích được một số giải pháp giải quyết vấn đề; lựa chọn được giải pháp phù hợp nhất.

Hoạt động 1.1: Khảo sát - Thuật toán sắp xếp

Câu hỏi 1: Sắp xếp là một hoạt động quen thuộc không chỉ trong tin học mà còn trong đời sống hằng ngày.
Em hãy nêu một ví dụ thực tế mà em từng gặp có liên quan đến việc sắp xếp dữ liệu hoặc đồ vật, và cho biết mục đích của việc sắp xếp đó là gì?

Câu hỏi 2: Trong lập trình, có rất nhiều thuật toán sắp xếp khác nhau, mỗi thuật toán có ưu điểm và cách hoạt động riêng.
Em hãy kể tên một hoặc vài thuật toán sắp xếp mà em đã được học hoặc từng nghe qua, và nêu ngắn gọn điều em nhớ nhất về chúng.

Hoạt động 1.2: Khởi động ⚡ So sánh tốc độ

Nhiệm vụ: Tương tác với mô phỏng bên dưới.
Thử chạy Interchange Sort, Selection Sort, Bubble Sort, Insertion Sort và Merge Sort với số lượng phần tử lớn.

Hoạt động 2: Bài toán thực tế 🌍

Câu hỏi 1: Trong các thuật toán vừa xem, em đã học hay nghe qua thuật toán nào?

Câu hỏi 2 (Vấn đề): Giả sử em cần sắp xếp điểm của 1.165.289 thí sinh thi THPT Quốc gia 2025.
Em sẽ chọn thuật toán nào (Interchange Sort, Selection Sort, Bubble Sort, Insertion Sort, hay Merge Sort) để tối ưu nhất?

Chốt vấn đề 💡

Nếu sắp xếp với một dữ liệu quá lớn, lên đến hàng triệu phần tử thì các thuật toán sắp xếp thông thường với độ phức tạp O(n^2) sẽ tốn rất nhiều thời gian để hoàn thành.
Vì vậy cần một thuật toán tối ưu hiệu suất hơn, đó là Sắp xếp trộn (Merge Sort).

Hoạt động 3: 🎮 Trò chơi "Trộn mảng"

Nhiệmvụ: Chơi trò chơi! Tương tác với mô phỏng để "trộn" 2 mảng đã sắp xếp
thành một mảng mới vẫn duy trì thứ tự.

Chốt kiến thức "Trộn" (Merge) 🧩

Sau khi trộn hai mảng đã được sắp xếp tăng dần vào một mảng mới cũng tăng dần, chúng ta nhận thấy được việc tạo một mảng mới nhanh hơn rất nhiều vì chỉ cần dựa vào hai phần tử đầu tiên (nhỏ nhất) của hai mảng để thêm vào mảng mới.

Hoạt động 4: Giải thuật Sắp xếp trộn 💡

Nhiệm vụ: Xem video chi tiết thuật toán Merge Sort.
Hãy chú ý cách nó "Chia" (Split) mảng ra và "Trộn" (Merge) chúng lại.

Hoạt động 4: Mô phỏng (Tương tác) 💡

Nhiệm vụ: Thực hành trải nghiệm mô phỏng chi tiết thuật toán Merge Sort.

Hoạt động 5: Sắp xếp trộn

Thuật toán sắp xếp trộn gồm 3 bước (Kĩ thuật "Chia để trị"):

Tổng kết "Chia để trị" 🎯

Thuật toán sắp xếp trộn được thực hiện qua 3 bước: Chia nhỏ dãy gốc, tiếp tục cho đến khi nhận được các dãy con đã sắp xếp đúng (Trị) thì tiến hành Trộn các dãy này để nhận được kết quả cuối cùng (Kết hợp). Các bước trên chính là kĩ thuật "Chia để trị".

Hoạt động 6: Luyện tập ✍️

Dựa vào kiến thức đã học, hãy điền các giá trị đúng vào các ô trống để hoàn thành quy trình sắp xếp trộn.

Hoạt động 7: Luyện tập - Kỹ sư lập trình ✍️

Nhiệm vụ: Dựa vào kiến thức đã học, hãy điền các giá trị đúng vào các ô trống để hoàn thành quy trình sắp xếp trộn.

Tổng kết chương trình Sắp xếp trộn

Thuật toán sắp xếp trộn sẽ bao gồm một hàm mergeSort(), hàm này sẽ tiến hành các bước chính của thuật toán và gọi hàm trộn hai dãy đã sắp xếp merge() khi thực hiện bước kết hợp.

Hoàn thành

Cảm ơn các em đã chú ý lắng nghe và tham gia các hoạt động trong bài giảng!
Chúc các em học tập tốt và hẹn gặp lại trong các bài giảng tiếp theo!