




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