Trắc nghiệm Tin học 11 Kết nối tri thức Bài 22: Thực hành bài toán sắp xếp - Đề 02
Trắc nghiệm Tin học 11 Kết nối tri thức Bài 22: Thực hành bài toán sắp xếp - Đề 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 tình huống nào sau đây, thuật toán sắp xếp chèn (Insertion Sort) được xem là lựa chọn hiệu quả nhất về mặt hiệu suất?
- A. Khi cần sắp xếp một danh sách lớn các số ngẫu nhiên.
- B. Khi danh sách cần sắp xếp đã gần như được sắp xếp hoàn toàn.
- C. Khi yêu cầu bộ nhớ sử dụng phải tối thiểu tuyệt đối.
- D. Khi cần đảm bảo thời gian sắp xếp là nhanh nhất trong mọi trường hợp.
Câu 2: Xét một danh sách [5, 2, 4, 7, 1, 3, 2, 6]. Nếu sử dụng thuật toán sắp xếp chọn (Selection Sort) để sắp xếp danh sách này theo thứ tự tăng dần, thì sau bước duyệt đầu tiên, danh sách sẽ trở thành như thế nào?
- A. [1, 2, 4, 7, 5, 3, 2, 6]
- B. [2, 5, 4, 7, 1, 3, 2, 6]
- C. [5, 2, 4, 7, 1, 3, 2, 6]
- D. [7, 5, 4, 2, 1, 3, 2, 6]
Câu 3: Trong thuật toán sắp xếp nổi bọt (Bubble Sort), điều gì xảy ra sau khi hoàn thành một lần duyệt qua toàn bộ danh sách?
- A. Danh sách đã được sắp xếp hoàn toàn.
- B. Phần tử nhỏ nhất đã được đưa về vị trí đầu tiên.
- C. Phần tử lớn nhất (hoặc nhỏ nhất, tùy theo thứ tự sắp xếp) đã được đưa về vị trí cuối cùng (hoặc đầu tiên).
- D. Thứ tự của các phần tử trong danh sách không thay đổi.
Câu 4: Giải thích tại sao thuật toán sắp xếp chèn (Insertion Sort) lại có hiệu suất tốt hơn sắp xếp nổi bọt (Bubble Sort) đối với dữ liệu gần như đã sắp xếp.
- A. Vì sắp xếp chèn luôn thực hiện ít phép so sánh hơn sắp xếp nổi bọt.
- B. Vì sắp xếp chèn chỉ dịch chuyển các phần tử đến đúng vị trí của chúng mà không cần nhiều lần hoán đổi như sắp xếp nổi bọt trong trường hợp dữ liệu gần đúng thứ tự.
- C. Vì sắp xếp chèn sử dụng ít bộ nhớ hơn sắp xếp nổi bọt.
- D. Vì sắp xếp chèn dễ dàng song song hóa hơn sắp xếp nổi bọt.
Câu 5: Trong đoạn mã Python sau, dòng lệnh `if arr[j] < arr[j-1]:` đóng vai trò gì trong thuật toán sắp xếp?
- A. Khởi tạo vòng lặp để duyệt qua danh sách.
- B. Hoán đổi vị trí hai phần tử trong danh sách.
- C. Kiểm tra xem danh sách đã được sắp xếp hay chưa.
- D. So sánh hai phần tử liền kề để xác định thứ tự của chúng và chuẩn bị cho việc hoán đổi nếu cần.
Câu 6: Ưu điểm chính của thuật toán sắp xếp chọn (Selection Sort) so với thuật toán sắp xếp nổi bọt (Bubble Sort) là gì?
- A. Sắp xếp chọn dễ cài đặt hơn sắp xếp nổi bọt.
- B. Sắp xếp chọn sử dụng ít bộ nhớ hơn sắp xếp nổi bọt.
- C. Sắp xếp chọn thực hiện ít phép hoán đổi hơn sắp xếp nổi bọt.
- D. Sắp xếp chọn luôn nhanh hơn sắp xếp nổi bọt trong mọi trường hợp.
Câu 7: Nhược điểm lớn nhất của thuật toán sắp xếp nổi bọt (Bubble Sort) khiến nó ít được sử dụng trong thực tế là gì?
- A. Độ phức tạp thời gian lớn, đặc biệt với dữ liệu có kích thước lớn.
- B. Khó cài đặt và dễ gây lỗi lập trình.
- C. Yêu cầu bộ nhớ lớn để lưu trữ dữ liệu tạm thời.
- D. Không ổn định (unstable sort).
Câu 8: Bạn có một danh sách điểm thi của học sinh và muốn sắp xếp chúng theo thứ tự giảm dần để hiển thị bảng xếp hạng. Thuật toán sắp xếp nào trong số các thuật toán đã học (chèn, chọn, nổi bọt) là phù hợp nhất để thực hiện công việc này một cách hiệu quả, nếu số lượng học sinh không quá lớn (ví dụ, dưới 100)?
- A. Thuật toán sắp xếp trộn (Merge Sort)
- B. Thuật toán sắp xếp nhanh (Quick Sort)
- C. Thuật toán sắp xếp chọn (Selection Sort) hoặc nổi bọt (Bubble Sort)
- D. Thuật toán sắp xếp chèn (Insertion Sort) hoặc chọn (Selection Sort)
Câu 9: Giả sử bạn cần sắp xếp một chồng bài kiểm tra theo thứ tự bảng chữ cái của tên học sinh. Bạn quyết định sử dụng phương pháp sắp xếp chèn. Mô tả bước đầu tiên bạn sẽ thực hiện.
- A. Chia chồng bài kiểm tra thành hai phần: một phần đã sắp xếp và một phần chưa sắp xếp.
- B. Lấy bài kiểm tra đầu tiên (thứ hai từ đầu nếu coi bài đầu tiên đã "sắp xếp") và so sánh nó với các bài kiểm tra trước đó (trong phần đã sắp xếp, nếu có) để tìm vị trí chèn thích hợp.
- C. Tìm bài kiểm tra có tên đứng đầu bảng chữ cái trong toàn bộ chồng bài.
- D. Đổi chỗ bài kiểm tra đầu tiên với bài kiểm tra cuối cùng.
Câu 10: Xét danh sách [8, 5, 2, 9, 5, 6, 3]. Nếu áp dụng thuật toán sắp xếp nổi bọt (Bubble Sort) để sắp xếp tăng dần, sau vòng lặp đầu tiên, danh sách sẽ trở thành:
- A. [2, 3, 5, 5, 6, 8, 9]
- B. [3, 5, 2, 6, 5, 8, 9]
- C. [5, 2, 8, 5, 6, 3, 9]
- D. [8, 5, 2, 9, 5, 6, 3]
Câu 11: Trong thuật toán sắp xếp chọn (Selection Sort) để sắp xếp danh sách theo thứ tự tăng dần, ở mỗi bước lặp, chúng ta thực hiện thao tác chính nào?
- A. So sánh các cặp phần tử liền kề và hoán đổi nếu chúng không đúng thứ tự.
- B. Tìm phần tử nhỏ nhất trong phần chưa được sắp xếp của danh sách và hoán đổi nó với phần tử đầu tiên của phần chưa sắp xếp.
- C. Chèn phần tử hiện tại vào đúng vị trí trong phần đã được sắp xếp của danh sách.
- D. Chia danh sách thành các danh sách con và sắp xếp từng danh sách con.
Câu 12: Khi nào thuật toán sắp xếp chèn (Insertion Sort) thể hiện hiệu suất tốt nhất (trường hợp tốt nhất)?
- A. Khi danh sách đã được sắp xếp hoàn toàn.
- B. Khi danh sách được sắp xếp ngược thứ tự.
- C. Khi danh sách chứa nhiều phần tử trùng lặp.
- D. Khi danh sách có kích thước rất lớn.
Câu 13: Giả sử bạn có một ứng dụng quản lý thư viện, và bạn muốn sắp xếp sách theo tiêu đề. Với số lượng sách lớn và thường xuyên có sách mới được thêm vào, thuật toán sắp xếp nào (trong số chèn, chọn, nổi bọt) sẽ là lựa chọn hợp lý hơn cả để duy trì danh sách sách luôn được sắp xếp?
- A. Thuật toán sắp xếp nổi bọt (Bubble Sort)
- B. Thuật toán sắp xếp chọn (Selection Sort)
- C. Cả ba thuật toán đều phù hợp như nhau.
- D. Thuật toán sắp xếp chèn (Insertion Sort), vì nó hiệu quả khi thêm phần tử mới vào danh sách đã sắp xếp.
Câu 14: Cho danh sách [10, 9, 8, 7, 6, 5]. Nếu sử dụng thuật toán sắp xếp chọn (Selection Sort) để sắp xếp theo thứ tự tăng dần, sau khi hoàn thành 3 bước lặp đầu tiên, danh sách sẽ trở thành:
- A. [5, 6, 7, 8, 9, 10]
- B. [6, 7, 8, 9, 10, 5]
- C. [8, 9, 10, 7, 6, 5]
- D. [7, 8, 9, 10, 6, 5]
Câu 15: Trong thuật toán sắp xếp nổi bọt (Bubble Sort), số lần so sánh trong trường hợp xấu nhất (worst-case scenario) tỉ lệ như thế nào với số lượng phần tử "n" trong danh sách?
- A. Tuyến tính (tỉ lệ thuận với n)
- B. Logarit (tỉ lệ với log n)
- C. Bình phương (tỉ lệ với n^2)
- D. Hằng số (không đổi theo n)
Câu 16: Để sắp xếp một danh sách các số nguyên theo thứ tự giảm dần bằng thuật toán sắp xếp chèn (Insertion Sort), bạn cần điều chỉnh điều kiện so sánh trong quá trình chèn như thế nào?
- A. Không cần điều chỉnh gì, thuật toán sắp xếp chèn luôn sắp xếp giảm dần.
- B. Thay đổi phép so sánh từ "nhỏ hơn" thành "lớn hơn" khi tìm vị trí chèn.
- C. Đảo ngược danh sách sau khi đã sắp xếp tăng dần.
- D. Sử dụng một thuật toán sắp xếp khác.
Câu 17: Trong một chương trình quản lý sản phẩm, bạn cần sắp xếp sản phẩm theo giá từ cao xuống thấp. Bạn có một danh sách lớn các sản phẩm nhưng giá thường xuyên được cập nhật và sản phẩm mới được thêm vào. Thuật toán sắp xếp nào (chèn, chọn, nổi bọt) sẽ phù hợp nhất để sử dụng định kỳ (ví dụ, mỗi đêm) để cập nhật thứ tự sắp xếp?
- A. Thuật toán sắp xếp nổi bọt (Bubble Sort)
- B. Thuật toán sắp xếp chèn (Insertion Sort)
- C. Thuật toán sắp xếp chọn (Selection Sort)
- D. Cả ba thuật toán đều có hiệu quả tương đương trong trường hợp này.
Câu 18: Giả sử bạn đang xây dựng một chức năng gợi ý tìm kiếm, và bạn muốn sắp xếp các kết quả tìm kiếm theo mức độ liên quan (điểm số). Bạn có một danh sách kết quả tìm kiếm và điểm số tương ứng. Thuật toán sắp xếp nào (chèn, chọn, nổi bọt) sẽ phù hợp nhất nếu bạn muốn hiển thị kết quả theo thứ tự liên quan nhất lên đầu?
- A. Thuật toán sắp xếp nổi bọt (Bubble Sort)
- B. Thuật toán sắp xếp chọn (Selection Sort)
- C. Không cần sắp xếp, chỉ cần hiển thị kết quả theo thứ tự tìm thấy.
- D. Bất kỳ thuật toán sắp xếp nào trong số trên (chèn, chọn, nổi bọt) đều có thể sử dụng để sắp xếp theo điểm số.
Câu 19: So sánh số lượng phép hoán đổi trung bình giữa thuật toán sắp xếp chọn (Selection Sort) và thuật toán sắp xếp nổi bọt (Bubble Sort) khi sắp xếp một danh sách ngẫu nhiên. Thuật toán nào thường thực hiện ít phép hoán đổi hơn?
- A. Sắp xếp chọn (Selection Sort) thường thực hiện ít phép hoán đổi hơn.
- B. Sắp xếp nổi bọt (Bubble Sort) thường thực hiện ít phép hoán đổi hơn.
- C. Cả hai thuật toán thực hiện số lượng phép hoán đổi tương đương nhau.
- D. Số lượng phép hoán đổi phụ thuộc vào kích thước danh sách, không thể so sánh chung.
Câu 20: Bạn có một danh sách các giao dịch ngân hàng cần được sắp xếp theo thời gian giao dịch. Nếu các giao dịch thường đã được sắp xếp gần đúng theo thời gian (chỉ có một vài giao dịch bị lệch thứ tự), thuật toán sắp xếp nào (chèn, chọn, nổi bọt) sẽ là lựa chọn tối ưu để nhanh chóng hoàn thành việc sắp xếp?
- A. Thuật toán sắp xếp chèn (Insertion Sort)
- B. Thuật toán sắp xếp chọn (Selection Sort)
- C. Thuật toán sắp xếp nổi bọt (Bubble Sort)
- D. Cả ba thuật toán đều có hiệu quả tương đương với dữ liệu gần sắp xếp.
Câu 21: Trong thuật toán sắp xếp chèn (Insertion Sort), vòng lặp bên ngoài (outer loop) thường bắt đầu từ phần tử thứ hai của danh sách. Giải thích lý do tại sao lại như vậy.
- A. Để giảm số lượng phép so sánh cần thực hiện.
- B. Để đảm bảo phần tử đầu tiên luôn là phần tử nhỏ nhất.
- C. Vì phần tử đầu tiên được coi như là một danh sách con đã được sắp xếp, và thuật toán bắt đầu chèn các phần tử còn lại vào danh sách con đã sắp xếp này.
- D. Đó chỉ là quy ước lập trình, không có lý do cụ thể.
Câu 22: Xét một danh sách gồm 1000 phần tử đã được sắp xếp ngược thứ tự. Thuật toán sắp xếp nào (chèn, chọn, nổi bọt) sẽ mất nhiều thời gian nhất để sắp xếp danh sách này theo thứ tự tăng dần?
- A. Thuật toán sắp xếp chèn (Insertion Sort)
- B. Thuật toán sắp xếp chọn (Selection Sort)
- C. Thuật toán sắp xếp nổi bọt (Bubble Sort)
- D. Cả ba thuật toán sẽ mất thời gian tương đương nhau trong trường hợp này.
Câu 23: Trong quá trình triển khai thuật toán sắp xếp chọn (Selection Sort), biến "min_index" (hoặc tương tự) thường được sử dụng để làm gì?
- A. Đếm số lượng phần tử đã được sắp xếp.
- B. Lưu trữ chỉ số của phần tử nhỏ nhất (hoặc lớn nhất) được tìm thấy trong phần chưa sắp xếp của danh sách.
- C. Xác định vị trí cần chèn phần tử trong thuật toán sắp xếp chèn.
- D. Kiểm soát số lần lặp của vòng lặp.
Câu 24: Giả sử bạn muốn sắp xếp một danh sách các đối tượng phức tạp (ví dụ, các bản ghi thông tin học sinh) dựa trên một thuộc tính cụ thể (ví dụ, điểm trung bình). Các thuật toán sắp xếp chèn, chọn, nổi bọt có thể được áp dụng trực tiếp không, hay cần điều chỉnh gì?
- A. Có thể áp dụng, nhưng cần điều chỉnh phép so sánh để so sánh dựa trên thuộc tính mong muốn (ví dụ, so sánh điểm trung bình thay vì so sánh trực tiếp các đối tượng).
- B. Không thể áp dụng trực tiếp, cần viết thuật toán sắp xếp hoàn toàn mới cho đối tượng phức tạp.
- C. Chỉ có thuật toán sắp xếp nổi bọt là có thể áp dụng cho đối tượng phức tạp.
- D. Cần chuyển đổi đối tượng phức tạp thành dữ liệu đơn giản trước khi sắp xếp.
Câu 25: Trong thuật toán sắp xếp nổi bọt (Bubble Sort) cải tiến, người ta thường sử dụng một biến cờ (flag) để kiểm tra xem có lần hoán đổi nào xảy ra trong một vòng lặp hay không. Mục đích của việc này là gì?
- A. Để tăng tốc độ hoán đổi các phần tử.
- B. Để phát hiện khi danh sách đã được sắp xếp hoàn toàn và dừng thuật toán sớm, tránh các vòng lặp không cần thiết.
- C. Để giảm số lượng phép so sánh trong mỗi vòng lặp.
- D. Để đơn giản hóa việc cài đặt thuật toán.
Câu 26: Nếu bạn cần sắp xếp một mảng số nguyên có kích thước rất nhỏ (ví dụ, dưới 10 phần tử), việc lựa chọn thuật toán sắp xếp (chèn, chọn, nổi bọt) có ảnh hưởng đáng kể đến hiệu suất tổng thể của chương trình không?
- A. Có, thuật toán sắp xếp chọn luôn nhanh hơn đáng kể so với các thuật toán khác.
- B. Có, thuật toán sắp xếp nổi bọt luôn chậm hơn đáng kể và nên tránh.
- C. Không, với kích thước nhỏ, sự khác biệt về hiệu suất giữa các thuật toán này thường không đáng kể.
- D. Có, thuật toán sắp xếp chèn luôn là lựa chọn tốt nhất cho mảng nhỏ.
Câu 27: Trong thuật toán sắp xếp chọn (Selection Sort), sau khi vòng lặp đầu tiên kết thúc, bạn có thể chắc chắn điều gì về phần tử đầu tiên của danh sách?
- A. Nó là phần tử lớn nhất trong danh sách.
- B. Nó nằm ở vị trí cuối cùng trong danh sách đã sắp xếp.
- C. Nó đã được so sánh với tất cả các phần tử còn lại trong danh sách.
- D. Nó là phần tử nhỏ nhất trong danh sách (nếu sắp xếp tăng dần) và đã ở đúng vị trí cuối cùng của nó trong danh sách đã sắp xếp.
Câu 28: Để sắp xếp một danh sách các chuỗi ký tự theo thứ tự bảng chữ cái, bạn có thể sử dụng trực tiếp các thuật toán sắp xếp số (chèn, chọn, nổi bọt) không? Nếu có, phép so sánh sẽ được thực hiện như thế nào?
- A. Có, có thể sử dụng trực tiếp. Phép so sánh sẽ được thực hiện dựa trên thứ tự mã ASCII (hoặc Unicode) của các ký tự trong chuỗi.
- B. Không thể sử dụng trực tiếp, cần chuyển đổi chuỗi thành số trước khi sắp xếp.
- C. Chỉ có thuật toán sắp xếp chèn là có thể sử dụng cho chuỗi.
- D. Cần viết hàm so sánh riêng cho chuỗi và tích hợp vào thuật toán sắp xếp.
Câu 29: Bạn muốn sắp xếp một danh sách số nguyên sao cho các số chẵn đứng trước các số lẻ, và trong mỗi nhóm (chẵn và lẻ), các số được sắp xếp tăng dần. Bạn có thể kết hợp các thuật toán sắp xếp cơ bản (chèn, chọn, nổi bọt) như thế nào để đạt được mục tiêu này?
- A. Không thể đạt được mục tiêu này chỉ với các thuật toán sắp xếp cơ bản.
- B. Chỉ cần sắp xếp danh sách bằng một trong các thuật toán (chèn, chọn, nổi bọt) là đủ.
- C. Có thể chia danh sách thành hai phần (chẵn và lẻ), sắp xếp từng phần bằng thuật toán sắp xếp, sau đó ghép lại.
- D. Cần sử dụng thuật toán sắp xếp tùy chỉnh hoàn toàn mới.
Câu 30: Trong bối cảnh thực tế, khi nào việc sử dụng các thuật toán sắp xếp đơn giản như chèn, chọn, nổi bọt vẫn được ưu tiên mặc dù có các thuật toán sắp xếp phức tạp và hiệu quả hơn (ví dụ, sắp xếp nhanh, sắp xếp trộn)?
- A. Khi cần sắp xếp danh sách có kích thước cực lớn.
- B. Khi danh sách có kích thước nhỏ, hoặc khi yêu cầu về độ phức tạp của code và tính dễ bảo trì được ưu tiên hơn hiệu suất tuyệt đối.
- C. Khi cần đảm bảo thời gian sắp xếp là nhanh nhất trong mọi trường hợp.
- D. Các thuật toán sắp xếp đơn giản không bao giờ được ưu tiên trong thực tế.