Trắc nghiệm Tin học 11 Kết nối tri thức Bài 21: Các thuật toán sắp xếp đơn giản - Đề 02
Trắc nghiệm Tin học 11 Kết nối tri thức Bài 21: Các thuật toán sắp xếp đơn giản - Đề 02 bao gồm nhiều câu hỏi hay, bám sát chương trình. Cùng làm bài tập trắc nghiệm ngay.
Câu 1: Trong thuật toán sắp xếp chèn (Insertion Sort), ở mỗi bước lặp, chúng ta chèn một phần tử vào vị trí thích hợp trong dãy con đã được sắp xếp. Giả sử bạn đang sắp xếp dãy số [5, 2, 4, 6, 1, 3] theo thứ tự tăng dần. Sau khi chèn phần tử thứ 3 (số 4), dãy số sẽ có dạng như thế nào?
- A. [2, 5, 4, 6, 1, 3]
- B. [2, 4, 5, 6, 1, 3]
- C. [5, 2, 4, 6, 1, 3]
- D. [4, 5, 2, 6, 1, 3]
Câu 2: Thuật toán sắp xếp chọn (Selection Sort) hoạt động bằng cách lặp đi lặp lại việc tìm phần tử nhỏ nhất từ phần chưa sắp xếp và đưa nó về đầu. Trong trường hợp mảng đã được sắp xếp ngược thứ tự, số lượng phép so sánh trong thuật toán sắp xếp chọn với mảng có n phần tử là bao nhiêu?
- A. n - 1
- B. n
- C. n(n - 1) / 2
- D. n^2
Câu 3: Xét thuật toán sắp xếp nổi bọt (Bubble Sort). Điều gì sẽ xảy ra sau vòng lặp đầu tiên của thuật toán này khi áp dụng lên dãy số [6, 5, 4, 3, 2, 1] để sắp xếp theo thứ tự tăng dần?
- A. [1, 5, 4, 3, 2, 6]
- B. [5, 4, 3, 2, 1, 6]
- C. [5, 6, 4, 3, 2, 1]
- D. [5, 4, 3, 2, 6, 1]
Câu 4: Trong các thuật toán sắp xếp đơn giản như sắp xếp chèn, sắp xếp chọn và sắp xếp nổi bọt, thuật toán nào có số lượng phép hoán đổi (swaps) ít nhất trong trường hợp xấu nhất?
- A. Sắp xếp chèn (Insertion Sort)
- B. Sắp xếp chọn (Selection Sort)
- C. Sắp xếp nổi bọt (Bubble Sort)
- D. Cả ba thuật toán đều có số lượng hoán đổi như nhau
Câu 5: Độ phức tạp thời gian trung bình của thuật toán sắp xếp chèn là O(n^2). Tuy nhiên, trong trường hợp nào thì sắp xếp chèn có độ phức tạp thời gian gần như tuyến tính O(n)?
- A. Khi mảng đầu vào đã gần như được sắp xếp
- B. Khi mảng đầu vào chứa các phần tử giống nhau
- C. Khi mảng đầu vào có kích thước nhỏ
- D. Sắp xếp chèn luôn có độ phức tạp O(n) trong mọi trường hợp
Câu 6: Thuật toán sắp xếp nào sau đây là ổn định (stable sorting algorithm)? Tính ổn định có nghĩa là các phần tử có khóa bằng nhau giữ nguyên thứ tự tương đối của chúng sau khi sắp xếp.
- A. Sắp xếp chọn (Selection Sort)
- B. Cả sắp xếp chọn và sắp xếp nổi bọt
- C. Sắp xếp chèn (Insertion Sort)
- D. Cả ba thuật toán: sắp xếp chèn, chọn và nổi bọt
Câu 7: Trong tình huống nào sau đây, thuật toán sắp xếp nổi bọt có thể được xem là hiệu quả hơn so với sắp xếp chọn hoặc sắp xếp chèn?
- A. Khi cần sắp xếp một mảng lớn với dữ liệu ngẫu nhiên
- B. Khi bộ nhớ bị hạn chế và cần sắp xếp tại chỗ
- C. Khi tốc độ sắp xếp là yếu tố quan trọng nhất
- D. Khi cần kiểm tra nhanh xem mảng đã được sắp xếp hay chưa
Câu 8: Xét đoạn mã giả sau mô tả một thuật toán sắp xếp:
```
For i = 1 to n-1
min_index = i
For j = i+1 to n
If array[j] < array[min_index]
min_index = j
Swap array[i] and array[min_index]
```
Đoạn mã này mô tả thuật toán sắp xếp nào?
- A. Sắp xếp chèn (Insertion Sort)
- B. Sắp xếp chọn (Selection Sort)
- C. Sắp xếp nổi bọt (Bubble Sort)
- D. Sắp xếp nhanh (Quick Sort)
Câu 9: Trong thuật toán sắp xếp chèn, giả sử bạn có một mảng con đã được sắp xếp [2, 4, 7, 9] và bạn muốn chèn phần tử mới là 5 vào đúng vị trí. Bạn cần thực hiện bao nhiêu phép so sánh để tìm vị trí chèn cho số 5?
Câu 10: Để sắp xếp một danh sách tên học sinh theo thứ tự bảng chữ cái, thuật toán sắp xếp nào sau đây là phù hợp và dễ cài đặt nhất trong các thuật toán đơn giản?
- A. Sắp xếp chọn (Selection Sort)
- B. Sắp xếp chèn (Insertion Sort)
- C. Sắp xếp nổi bọt (Bubble Sort)
- D. Cả ba thuật toán đều phù hợp như nhau
Câu 11: Một lập trình viên cần sắp xếp một mảng số nguyên nhỏ có kích thước khoảng 20 phần tử và mảng này có xu hướng gần như đã được sắp xếp. Thuật toán sắp xếp đơn giản nào sẽ là lựa chọn tốt nhất về hiệu suất trong trường hợp này?
- A. Sắp xếp chèn (Insertion Sort)
- B. Sắp xếp chọn (Selection Sort)
- C. Sắp xếp nổi bọt (Bubble Sort)
- D. Sắp xếp trộn (Merge Sort)
Câu 12: Trong thuật toán sắp xếp chọn, sau khi hoàn thành i vòng lặp, điều gì đảm bảo đúng về mảng?
- A. i phần tử lớn nhất đã được sắp xếp ở cuối mảng
- B. i phần tử nhỏ nhất và lớn nhất đã được sắp xếp ở hai đầu mảng
- C. i phần tử nhỏ nhất đã được sắp xếp ở đầu mảng
- D. Mảng đã được sắp xếp hoàn toàn
Câu 13: Cho dãy số [9, 7, 5, 3, 1]. Nếu sử dụng thuật toán sắp xếp nổi bọt, cần bao nhiêu vòng lặp (duyệt qua toàn bộ mảng) để dãy số được sắp xếp hoàn toàn theo thứ tự tăng dần?
Câu 14: Ưu điểm chính của thuật toán sắp xếp chọn so với sắp xếp nổi bọt là gì?
- A. Độ phức tạp thời gian tốt hơn trong trường hợp trung bình
- B. Tính ổn định (stable)
- C. Dễ cài đặt hơn
- D. Số lượng phép hoán đổi ít hơn
Câu 15: Thuật toán sắp xếp nào có thể dễ dàng được tối ưu hóa để dừng sớm nếu mảng đã được sắp xếp trong quá trình thực hiện?
- A. Sắp xếp chọn (Selection Sort)
- B. Sắp xếp chèn (Insertion Sort)
- C. Sắp xếp nổi bọt (Bubble Sort)
- D. Cả ba thuật toán đều có thể tối ưu hóa như nhau
Câu 16: Xét một mảng gồm các số nguyên dương có giá trị từ 1 đến 100. Nếu bạn muốn sắp xếp mảng này và hiệu suất là yếu tố quan trọng nhất, thuật toán sắp xếp nào sau đây có thể hiệu quả hơn các thuật toán sắp xếp so sánh (như chèn, chọn, nổi bọt)?
- A. Sắp xếp chèn (Insertion Sort)
- B. Sắp xếp chọn (Selection Sort)
- C. Sắp xếp nổi bọt (Bubble Sort)
- D. Sắp xếp đếm (Counting Sort)
Câu 17: Trong thuật toán sắp xếp chèn, phần "đã sắp xếp" của mảng nằm ở vị trí nào?
- A. Ở đầu mảng và mở rộng dần về phía cuối
- B. Ở cuối mảng và mở rộng dần về phía đầu
- C. Ở giữa mảng và mở rộng ra hai phía
- D. Vị trí không cố định, tùy thuộc vào dữ liệu
Câu 18: Để sắp xếp một mảng có kích thước lớn chứa dữ liệu ngẫu nhiên, các thuật toán sắp xếp đơn giản (chèn, chọn, nổi bọt) thường không được khuyến khích sử dụng. Vì sao?
- A. Vì chúng khó cài đặt
- B. Vì độ phức tạp thời gian là O(n^2), không hiệu quả với mảng lớn
- C. Vì chúng không ổn định
- D. Vì chúng yêu cầu bộ nhớ phụ lớn
Câu 19: Trong các thuật toán sắp xếp đơn giản, thuật toán nào thực hiện ít phép gán nhất trong quá trình sắp xếp?
- A. Sắp xếp chèn (Insertion Sort)
- B. Sắp xếp chọn (Selection Sort)
- C. Sắp xếp nổi bọt (Bubble Sort)
- D. Cả ba thuật toán đều có số phép gán tương đương
Câu 20: Nếu bạn có một mảng đã được sắp xếp và bạn thêm một phần tử mới vào cuối mảng. Thuật toán sắp xếp đơn giản nào có thể sắp xếp lại mảng một cách hiệu quả nhất (chỉ cần đưa phần tử mới vào đúng vị trí)?
- A. Sắp xếp chèn (Insertion Sort)
- B. Sắp xếp chọn (Selection Sort)
- C. Sắp xếp nổi bọt (Bubble Sort)
- D. Cả ba thuật toán đều hiệu quả như nhau
Câu 21: Trong thuật toán sắp xếp nổi bọt, các phần tử "nặng hơn" (lớn hơn) "nổi" lên trên hay "chìm" xuống dưới trong mỗi vòng lặp?
- A. "Nổi" lên trên (về phía cuối mảng)
- B. "Chìm" xuống dưới (về phía đầu mảng)
- C. Vừa nổi lên vừa chìm xuống tùy trường hợp
- D. Không có hiện tượng nổi hay chìm trong sắp xếp nổi bọt
Câu 22: Để sắp xếp một mảng các đối tượng phức tạp dựa trên một thuộc tính khóa, thuật toán sắp xếp nào trong số các thuật toán đơn giản vẫn có thể áp dụng được trực tiếp, miễn là phép so sánh giữa các khóa được định nghĩa?
- A. Sắp xếp chọn (Selection Sort) và sắp xếp nổi bọt (Bubble Sort) thôi
- B. Sắp xếp chèn (Insertion Sort) thôi
- C. Chỉ có sắp xếp nổi bọt (Bubble Sort)
- D. Cả ba thuật toán: sắp xếp chèn, chọn và nổi bọt
Câu 23: Trong thuật toán sắp xếp chọn, việc tìm phần tử nhỏ nhất trong phần chưa sắp xếp của mảng được thực hiện ở vòng lặp nào (vòng lặp ngoài hay vòng lặp trong)?
- A. Vòng lặp ngoài
- B. Vòng lặp trong
- C. Cả vòng lặp trong và vòng lặp ngoài
- D. Không có vòng lặp nào thực hiện việc tìm phần tử nhỏ nhất
Câu 24: Nếu bạn cần sắp xếp một mảng tại chỗ (in-place sorting), tức là không sử dụng thêm bộ nhớ đáng kể ngoài mảng ban đầu, thuật toán nào trong số các thuật toán sắp xếp đơn giản đáp ứng yêu cầu này?
- A. Chỉ sắp xếp chọn (Selection Sort)
- B. Chỉ sắp xếp chèn (Insertion Sort)
- C. Chỉ sắp xếp nổi bọt (Bubble Sort)
- D. Cả ba thuật toán: sắp xếp chèn, chọn và nổi bọt
Câu 25: Để sắp xếp một danh sách liên kết đơn (singly linked list), thuật toán sắp xếp đơn giản nào có thể được điều chỉnh để hoạt động hiệu quả hơn so với hai thuật toán còn lại?
- A. Sắp xếp chèn (Insertion Sort)
- B. Sắp xếp chọn (Selection Sort)
- C. Sắp xếp nổi bọt (Bubble Sort)
- D. Cả ba thuật toán đều không hiệu quả trên danh sách liên kết
Câu 26: Trong trường hợp tốt nhất, số lượng phép so sánh của thuật toán sắp xếp nổi bọt là O(n). Trường hợp tốt nhất này xảy ra khi nào?
- A. Khi mảng được sắp xếp ngược
- B. Khi mảng đã được sắp xếp
- C. Khi mảng chứa nhiều phần tử trùng lặp
- D. Trường hợp tốt nhất của sắp xếp nổi bọt luôn là O(n^2)
Câu 27: Nếu bạn cần sắp xếp một mảng số nguyên và biết chắc chắn rằng các số này nằm trong một phạm vi rất nhỏ (ví dụ từ 0 đến 9). Thuật toán sắp xếp nào (ngoài các thuật toán so sánh) có thể là lựa chọn tối ưu về mặt thời gian?
- A. Sắp xếp trộn (Merge Sort)
- B. Sắp xếp nhanh (Quick Sort)
- C. Sắp xếp đếm (Counting Sort)
- D. Sắp xếp vun đống (Heap Sort)
Câu 28: Trong thuật toán sắp xếp chèn, để chèn một phần tử vào đúng vị trí trong phần đã sắp xếp, các phần tử lớn hơn nó sẽ được dịch chuyển về phía nào?
- A. Về phía đầu mảng
- B. Về phía cuối mảng (sang phải)
- C. Vừa về đầu vừa về cuối mảng
- D. Không có sự dịch chuyển phần tử trong sắp xếp chèn
Câu 29: Thuật toán sắp xếp nào sau đây có thể được mô tả là "tìm phần tử nhỏ nhất và đặt nó vào đúng vị trí" một cách lặp đi lặp lại?
- A. Sắp xếp chèn (Insertion Sort)
- B. Sắp xếp chọn (Selection Sort)
- C. Sắp xếp nổi bọt (Bubble Sort)
- D. Sắp xếp nhanh (Quick Sort)
Câu 30: Nếu bạn có một ứng dụng cần sắp xếp dữ liệu gần như theo thời gian thực và dữ liệu mới liên tục được thêm vào. Thuật toán sắp xếp đơn giản nào có thể phù hợp để duy trì danh sách luôn được sắp xếp một cách hiệu quả khi có dữ liệu mới?
- A. Sắp xếp chèn (Insertion Sort)
- B. Sắp xếp chọn (Selection Sort)
- C. Sắp xếp nổi bọt (Bubble Sort)
- D. Sắp xếp trộn (Merge Sort)