Danh mục bài soạn

Giải tin học ứng dụng 11 sách cánh diều bài 9 Lập trình thuật toán sắp xếp nhanh

Hướng dẫn học môn Tin học ứng dụng 11 sách mới Cánh diều. Dưới đây là lời giải chi tiết bài 9 Lập trình thuật toán sắp xếp nhanh. Từng bài tập được giải chi tiết, rõ ràng, dễ hiểu. Hi vọng, hocthoi.net sẽ hỗ trợ các em trong quá trình học tập, giúp các em ngày càng tiến bộ hơn.

KHỞI ĐỘNG

Câu hỏi: Nếu cần chọn một trong hai việc sau đây, em sẽ chọn làm việc nào? Vì sao?

1) Từ mô tả thuật toán bằng liệt kê các bước, viết chương trình Python thực hiện thuật toán.

2) Từ chương trình Python thực hiện thuật toán, viết lại ngắn gọn ý tưởng chính của thuật toán.

Lời giải:

Chọn bước:

1) Từ mô tả thuật toán bằng liệt kê các bước, viết chương trình Python thực hiện thuật toán.

=> Như vậy dễ nắm được các bước thực hiện và giúp bài toán có phương pháp giải chính xác hơn.

THỰC HÀNH

Nhiệm vụ 1. Viết chương trình thực hiện sắp xếp nhanh một dãy số và chạy thử kiểm tra.

a) Dựa trên mã lệnh thuật toán cho trong Hình 3.

b) Dựa trên mã lệnh thuật toán cho trong Hình 5.

Lời giải:

a. Dựa trên mã lệnh thuật toán cho trong Hình 3.

Viết chương trình thực hiện sắp xếp nhanh một dãy số và chạy thử kiểm tra

b) Dựa trên mã lệnh thuật toán cho trong Hình 5.

Viết chương trình thực hiện sắp xếp nhanh một dãy số và chạy thử kiểm tra

Nhiệm vụ 2. Bổ sung thêm các câu lệnh in kết quả trung gian vào các chương trình nói trên để có thể quan sát diễn biến từng bước thực hiện sắp xếp nhanh một dãy số.

Lời giải:

Câu lệnh in ra màn hình: print(".....")

Các bước thực hiện

Phân tích bài toán

Độ phức tạp thuật toán:

VẬN DỤNG

Câu hỏi. Em hãy thực hiện các công việc sau:

a) Sửa lại thủ tục phân đoạn đề có hàm quickSort_ down sắp xếp theo thứ tự giảm dần.

Gợi ý. Sửa đối phép so sánh trong câu lệnh 1f a[3] <= pivot: thành 1f a[3]} >= pivot:

b) Tiếp tục sửa lại để có hàm quickSort_tuple down sắp xếp danh sách

các cặp. ví dụ (tên học sinh, điểm môn học) theo điệm môn học giảm dần.

Gợi ý: Sửa đổi đầu vào thành danh sách các cặp (tên học sinh, điểm môn học) và thực hiện so sánh theo điểm môn học.

Lời giải:

a)Gợi ý

void swap(int *a,int *b){

int temp=*a;

*a=*b;

*b=temp;

}

void bubblesort(int arr[],int n){

for(int i=0; i<n-1; i++){

for(int j=0; j<n-i-1; j++){

if(arr[j]>arr[j+1]){

swap(&arr[j],&arr[j+1]);

}

}

}

}

b) Gợi ý

void quickSort(int a[], int l, int r){

int p = a[(l+r)/2];

int i = l, j = r;

while (i < j){

while (a[i] < p){

i++;

}

while (a[j] > p){

j--;

}

if (i <= j){

int temp = a[i];

a[i] = a[j];

a[j] = temp;

i++;

j--;

}

}

if (i < r){

quickSort(a, i, r);

}

if (l < j){

quickSort(a, l, j);

}

}

CÂU HỎI TỰ KIỂM TRA

Câu 1. Em hãy giải thích tại sao lại nói thuật toán sắp xếp nhanh (QuickSort) theo chiến lược “chia đề trị”.

Lời giải:

Thuật toán QuickSort được xây dựng theo chiến lược "chia để trị" bởi vì nó phân chia dãy số cần sắp xếp thành các phần nhỏ hơn, sau đó sắp xếp từng phần đó và kết hợp các phần đã sắp xếp lại thành dãy số đã được sắp xếp.

Cụ thể, thuật toán QuickSort chia dãy số cần sắp xếp thành hai phần dựa trên một phần tử được gọi là pivot. Tất cả các phần tử nhỏ hơn pivot được đưa về bên trái pivot, còn các phần tử lớn hơn pivot được đưa về bên phải pivot. Sau đó, thuật toán đệ quy được áp dụng lên từng phần của dãy số này, cho đến khi các phần con chỉ còn duy nhất một phần tử. Cuối cùng, các phần đã sắp xếp lại với nhau để tạo ra dãy số đã được sắp xếp.

Vì vậy, chiến lược "chia để trị" của QuickSort cho phép thuật toán chia nhỏ vấn đề lớn hơn thành các vấn đề nhỏ hơn, giúp cho việc giải quyết các vấn đề này trở nên đơn giản và hiệu quả hơn."

Câu 2. Theo em thì diễn biến từng bước sắp xếp nhanh một dãy số cụ thể dùng phân đoạn Lomuto sẽ giống hay sẽ khác với dùng phân đoạn Hoare?

Lời giải:

Diễn biến từng bước sắp xếp nhanh một dãy số cụ thể dùng phân đoạn Lomuto sẽ khác với dùng phân đoạn Hoare. Sự khác biệt giữa phương pháp phân đoạn Lomuto và phân đoạn Hoare trong thuật toán QuickSort là ở việc chọn pivot, cách phân đoạn và cách sắp xếp các phần tử.

Cụ thể, phương pháp phân đoạn Lomuto sẽ chọn pivot là phần tử cuối cùng của mảng, phân đoạn theo pivot và sau đó đưa pivot về giữa hai phân đoạn, tiếp tục thực hiện thuật toán QuickSort trên hai phân đoạn trái và phải của pivot. Trong khi đó, phương pháp phân đoạn Hoare sẽ chọn pivot là phần tử ở giữa mảng, đưa hai con trỏ từ đầu và cuối mảng trỏ tới nhau và dịch chuyển chúng sao cho phần tử bên trái pivot lớn hơn pivot, phần tử bên phải pivot nhỏ hơn pivot, sau đó đưa pivot về vị trí mới và thực hiện QuickSort trên hai phân đoạn trái và phải của pivot.

Từ khóa tìm kiếm google:

Giải tin học 11 cánh diều bài 9 Lập trình thuật toán sắp xếp nhanh, Giải tin học 11 cánh diều bài 9 Lập trình thuật toán sắp xếp nhanh, Giải tin học KNTT bài 9 Lập trình thuật toán sắp xếp nhanh
Phần trên, hocthoi.net đã soạn đầy đủ lý thuyết và bài tập của bài học: Giải tin học ứng dụng 11 sách cánh diều bài 9 Lập trình thuật toán sắp xếp nhanh . Bài học nằm trong chuyên mục: Giải tin học ứng dụng 11 cánh diều. Phần trình bày do Thanh Tuyền CTV tổng hợp và thực hiện giải bài. Nếu có chỗ nào chưa rõ, có phần nào muốn hiểu rộng thêm, bạn đọc vui lòng comment bên dưới. Ban biên tập sẽ giải đáp giúp các bạn trong thời gian sớm nhất.

Bài soạn các môn khác

Bình luận