TopStudy

Tin học · Lớp 11

Giải SGK Tin học 11 Cánh diều Bài 9. Lập trình sắp xếp nhanh có đáp án

7 câu · 11 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

Nếu cần chọn một trong hai việc sau đây, em sẽ chọn việc làm 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 Phython thực hiện thuật toán.

2. Từ chương trình Phython 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.

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 ý

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.

Câu 2

1 điểm

Dựa trên mã giả thuật toán phân đoạn Lomuto cho trong Hình 2, em hãy:

1. Mô tả diễn biến từng bước thực hiện phân đoạn Lomuto khi đầu vào là dãy 6 số nguyên tăng dần, ví dụ {1,2,3,4,5,6}

2. Tính số phép toán sơ cấp thực hiện phân đoạn Lomuto khi đầu vào là dãy tăng dầ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 ý

1. Mô tả diễn biến từng bước thực hiện phân đoạn Lomuto khi đầu vào là dãy 6 số nguyên tăng dần, ví dụ {1,2,3,4,5,6

Hình minh hoạ

2. 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.

Câu 3

1 điểm

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.

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 ý

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

Hình minh hoạ

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

Hình minh hoạ

Câu 4

1 điểm
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ố.
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â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:

Câu 5

1 điểm

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 y: 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.

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 ý

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 6

1 điểm
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ị”.
Xem đáp án và lời giải

Câu 7

1 điểm
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?
Xem đáp án và lời giải

Đề cùng chủ đề

Tất cả đề Tin học 11 – Cánh diều · Các bộ sách Tin học Lớp 11