Câu 1:
Tìm kiếm tuyến tính hoạt động tốt nhất trong trường hợp
nào? A. Dữ liệu đã sắp xếp
B. Dữ liệu nhỏ, chưa sắp xếp
C. Dữ liệu lớn
D. Không cần tìm kiếm
Câu 2:
Trong , thao tác chính gì? selection sort
A. So sánh đổi vị trí phần tử liên tiếp
xếp C. Chia đôi mảng rồi sắp xếp
D. Đẩy phần tử lớn nhất xuống cuối mảng
Câu 3:
Bubble sort thực hiện như thế nào?
A. Chọn phần tử nhỏ nhất đưa về đầu
B. Chọn phần tử lớn nhất đưa về cuối bằng hoán đổi liên
tiếp C. Sử dụng đệ quy
D. Không sử dụng vòng lặp
Câu 4:
Đoạn sau thực hiện thao tác gì?
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (a[j] > a[j + 1]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
A. Tìm kiếm tuyến tính
B. Tìm kiếm nhị phân
C. Selection sort
D. Bubble sort
Câu 5:
Lợi ích chính của so với tìm kiếm tuyến tính tìm kiếm nhị phân
là: A. Dễ lập trình hơn
B. Tìm nhanh hơn với mảng lớn đã sắp xếp
C. Không cần mảng sắp xếp
D. Tìm chính xác hơn
Câu 6: Điều kiện nào cần thiết để áp dụng tìm kiếm nhị phân (Binary
Search)? A. Mảng phải được sắp xếp
B. Mảng phải kích thước chẵn
C. Mảng phải chứa các giá trị duy nhất
D. Mảng phải mảng động
Câu 7: Kết quả của đoạn code tìm kiếm tuyến tính sau gì?
#include <stdio.h>
int int int int linearSearch( arr[], n, key) {
i = ; i < n; i++) for (int 0
(arr[i] == key) if
i; return
; return -1
}
int main() {
arr[] = { , , , , }; int 5 2 9 1 7
key = ; int 9
, linearSearch(arr, , key)); printf("%d" 5
; return 0
}
A. 2
B. 9
C. -1
D. Lỗi biên dịch
Câu 8: Đoạn code sau thực hiện thuật toán nào?
#include <stdio.h>
void int int sort( arr[], n) {
i = ; i < n ; i++)for (int 0 -1
j = ; j < n-i ; j++) for (int 0 -1
(arr[j] > arr[j+ ]) { if 1
temp = arr[j]; int
arr[j] = arr[j+ ]; 1
arr[j+ ] = temp; 1
}
}
A. Selection Sort
B. Bubble Sort
C. Insertion Sort
D. Quick Sort
Câu 9: Kết quả của đoạn code selection sort sau khi in mảng đã sắp xếp?
#include <stdio.h>
void int int selectionSort( arr[], n) {
i = ; i < n ; i++) { for (int 0 -1
min_idx = i; int
j = i+ ; j < n; j++) for (int 1
(arr[j] < arr[min_idx]) if
min_idx = j;
temp = arr[min_idx]; int
arr[min_idx] = arr[i];
arr[i] = temp;
}
}
int main() {
arr[] = { , , , }; int 64 34 25 12
selectionSort(arr, ); 4
i = ; i < ; i++) for (int 0 4
, arr[i]); printf("%d "
; return 0
}
A. 12 25 34 64
B. 64 34 25 12
C. 25 12 34 64
D. Lỗi biên dịch
Câu 10: Đoạn code tìm kiếm nhị phân sau trả về nếu key = 10?
#include <stdio.h>
int int int int int binarySearch( arr[], left, right, key)
{ (left <= right) { while
mid = left + (right - left) / ; int 2
(arr[mid] == key) if
mid; return
(arr[mid] < key) if
left = mid + ; 1
else
right = mid - ; 1
}
; return -1
}
int main() {
arr[] = { , , , , }; int 2 3 4 10 40
, binarySearch(arr, , , )); printf("%d" 0 4 10
; return 0
}
A. 3
B. 10
C. -1
D. 4
Câu 11: Trong Bubble Sort, số lần hoán đổi (swap) sẽ giảm nếu mảng đã gần sắp xếp. Điều này
đúng hay sai?
A. Đúng
B. Sai
Dùng cho câu 12 -> 15: Cho mảng số số nguyên 8 10 1 6 5
12. Chạy từng bước sắp xếp tăng dần theo thuật toán selection
13. Chạy từng bước sắp xếp giảm dần theo thuật toán selection
14. Chạy từng bước sắp xếp tăng dần theo thuật toán Bubble
15. Chạy từng bước sắp xếp giảm dần theo thuật toán Bubble
16. Cho mảng gồm các phần tử: 3 5 12 15 20 24 17 30 32 35. Hãy cho biết từng bước m kiếm
phần tử 30
17. Cho mảng gồm các phần tử: 3 5 12 15 20 24 17 30 32 35. Hãy cho biết từng bước m kiếm
phần tử 1
18. Cho mảng gồm các phần tử: 3 5 12 15 20 24 17 30 32 35. Hãy cho biết từng bước m kiếm
phần tử 50
19. Cho mảng 8 10 1 6 5. Hãy cho biết từng bước tìm kiếm phần tử 50
20. Cho mảng 8 10 1 6 5. Hãy cho biết từng bước tìm kiếm phần tử 1
21. Cho mảng 8 10 1 6 5. Hãy cho biết từng bước tìm kiếm phần tử -2

Preview text:

Câu 1:
Tìm kiếm tuyến tính hoạt động tốt nhất trong trường hợp
nào? A. Dữ liệu đã sắp xếp
B. Dữ liệu nhỏ, chưa sắp xếp C. Dữ liệu lớn D. Không cần tìm kiếm Câu 2:
Trong selection sort, thao tác chính là gì?
A. So sánh và đổi vị trí phần tử liên tiếp
B. Chọn phần tử nhỏ nhất và hoán đổi với đầu mảng chưa sắp
xếp C. Chia đôi mảng rồi sắp xếp
D. Đẩy phần tử lớn nhất xuống cuối mảng Câu 3:
Bubble sort thực hiện như thế nào?
A. Chọn phần tử nhỏ nhất và đưa về đầu
B. Chọn phần tử lớn nhất và đưa về cuối bằng hoán đổi liên
tiếp C. Sử dụng đệ quy
D. Không sử dụng vòng lặp Câu 4:
Đoạn mã sau thực hiện thao tác gì?
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) { if (a[j] > a[j + 1]) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } A. Tìm kiếm tuyến tính B. Tìm kiếm nhị phân C. Selection sort D. Bubble sort Câu 5:
Lợi ích chính của tìm kiếm nhị phân so với tìm kiếm tuyến tính
là: A. Dễ lập trình hơn
B. Tìm nhanh hơn với mảng lớn đã sắp xếp
C. Không cần mảng sắp xếp D. Tìm chính xác hơn
Câu 6: Điều kiện nào cần thiết để áp dụng tìm kiếm nhị phân (Binary
Search)? A. Mảng phải được sắp xếp
B. Mảng phải có kích thước chẵn
C. Mảng phải chứa các giá trị duy nhất
D. Mảng phải là mảng động
Câu 7: Kết quả của đoạn code tìm kiếm tuyến tính sau là gì? #include
int linearSearch(int arr[], int n, int key) { for ( i = int 0; i < n; i++) if (arr[i] == key) return i; return -1; } int main() { arr[] = { int 5, 2, 9, 1, 7}; key = int 9;
printf("%d", linearSearch(arr, 5, key)); return 0; } A. 2 B. 9 C. -1 D. Lỗi biên dịch
Câu 8: Đoạn code sau thực hiện thuật toán nào? #include void sort(int arr[], int n) { for ( i = int 0; i < n-1; i++) for ( j = int 0; j < n-i-1; j++) if (arr[j] > arr[j+1]) { temp = arr[j]; int arr[j] = arr[j+1]; arr[j+1] = temp; } } A. Selection Sort B. Bubble Sort C. Insertion Sort D. Quick Sort
Câu 9: Kết quả của đoạn code selection sort sau là gì khi in mảng đã sắp xếp? #include
void selectionSort(int arr[], int n) { for ( i = int 0; i < n-1; i++) { min_idx = i; int for ( j = i+ int 1; j < n; j++)
if (arr[j] < arr[min_idx]) min_idx = j; temp = arr[min_idx]; int arr[min_idx] = arr[i]; arr[i] = temp; } } int main() { arr[] = { int 64, 34, 25, 12}; selectionSort(arr, 4); for ( i = int 0; i < 4; i++) printf("%d ", arr[i]); return 0; } A. 12 25 34 64 B. 64 34 25 12 C. 25 12 34 64 D. Lỗi biên dịch
Câu 10: Đoạn code tìm kiếm nhị phân sau trả về gì nếu key = 10? #include
int binarySearch(int arr[], int left, int right, int key) { while (left <= right) { mid = left + (right - left) / int 2; if (arr[mid] == key) return mid; if (arr[mid] < key) left = mid + 1; else right = mid - 1; } return -1; } int main() { arr[] = { int 2, 3, 4, 10, 40};
printf("%d", binarySearch(arr, 0, 4, 10)); return 0; } A. 3 B. 10 C. -1 D. 4
Câu 11: Trong Bubble Sort, số lần hoán đổi (swap) sẽ giảm nếu mảng đã gần sắp xếp. Điều này đúng hay sai? A. Đúng B. Sai
Dùng cho câu 12 -> 15: Cho mảng số số nguyên 8 10 1 6 5
12. Chạy từng bước sắp xếp tăng dần theo thuật toán selection
13. Chạy từng bước sắp xếp giảm dần theo thuật toán selection
14. Chạy từng bước sắp xếp tăng dần theo thuật toán Bubble
15. Chạy từng bước sắp xếp giảm dần theo thuật toán Bubble
16. Cho mảng gồm các phần tử: 3 5 12 15 20 24 17 30 32 35. Hãy cho biết từng bước tìm kiếm phần tử 30
17. Cho mảng gồm các phần tử: 3 5 12 15 20 24 17 30 32 35. Hãy cho biết từng bước tìm kiếm phần tử 1
18. Cho mảng gồm các phần tử: 3 5 12 15 20 24 17 30 32 35. Hãy cho biết từng bước tìm kiếm phần tử 50
19. Cho mảng 8 10 1 6 5. Hãy cho biết từng bước tìm kiếm phần tử 50
20. Cho mảng 8 10 1 6 5. Hãy cho biết từng bước tìm kiếm phần tử 1
21. Cho mảng 8 10 1 6 5. Hãy cho biết từng bước tìm kiếm phần tử -2