Tải bản đầy đủ (.docx) (23 trang)

Cấu trúc dữ liệu và giải thuậtBài kiểm tra 1

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (88.06 KB, 23 trang )

Bài kiểm tra 1
1.Đây là định nghĩa của độ phức nào? “được tính là tổng số chi phí về mặt tổng thời gian cần thiết để hồn
thành thuật tốn, được đánh giá dựa vào số lượng các thao tác được sử dụng trong thuật toán dựa trên bộ dữ
liệu đầu vào
Chọn một câu trả lời:
a. Thời gian
b. Cả hai lựa chọn đều đúng
c. Cả hai lựa chọn đều sai
d. Không gian
2.Cho biết kết quả sau khi thực hiện đoạn chương trình sau:
int main()
{
int a[20], n,i,k;
k = a[0];
for(i=0; iif (a[i] > k)
k = a[i];
}
Chọn một câu trả lời:
a. k có giá trị nhỏ nhất Câu trả lời không đúng
b. k có giá trị lớn nhất
c. a[k] có giá trị lớn nhất
d. a[k] có giá trị nhỏ nhất

3.Độ phức tạp thuật tốn được đánh giá có loại nào?
Chọn một câu trả lời:
a. Độ phức tạp thời gian
b. Độ phức tạp không gian
c. Không phải các loại liệt kê
d. Cả hai loại được liệt kê
4.Đâu là cơng thức tổng qt để tính giai thừa dựa vào giải thuật đệ quy




Chọn một câu trả lời:
a. GiaithuaKhông = n* Giaithua(n+1)
b. GiaithuaKhông = n* GiaithuaKhông
c. GiaithuaKhông = (n-1)* GiaithuaKhông
d. GiaithuaKhông = n* Giaithua(n-1)
5.Cho mảng a có N (N>=2) phần từ, x là một biến, xét đoạn mã sau cho biết đoạn mã biểu diễn thuật tốn gì?
Bước 1: Khởi gán i = 0, s = 0, qua bước 2;
Bước 2: Nếu a[i] == x thì
s++; qua bước 3
Bước 3: i = i + 1;
Nếu i == n: hết mảng. Dừng, in s ra màn hình
Ngược lại: Lặp lại bước 2
Chọn một câu trả lời:
a. Tìm kiếm tuyến tính phần tử mang giá trị x trong mảng
b. Đếm số phần tử có giá trị bằng phần tử đầu tiên trong mảng
c. Đếm số phần tử trong mảng đầu tiên trong mảng
d. Đếm số phần tử có giá trị bằng x trong mảng
6.Cho thuật toán sau:
int LinearSearch( float M[], int N, float X)
{
int k = 0;
M[N] = X;
while (M[k] !=X)//n+1
k++;
if (kreturn -1;
}
Chọn câu đúng nhất trong trường hợp xấu nhất khi không tìm thấy phần tử nào có giá trị bằng X:



Chọn một câu trả lời:
a. Số phép gán: Gmax = 2 Số phép so sánh: Smax = N + 2
b. Số phép gán: Gmax = 1 Số phép so sánh: Smax = N + 2
c. Số phép gán: Gmax = 2 Số phép so sánh: Smax = N + 1 Câu trả lời không đúng
d. Số phép gán: Gmax = 2 Số phép so sánh: Smax = 2N + 2
7.Đoạn mơ tả này thuộc thuật tốn nào:
Bước 1: i = 0
Bước 2: tính các giá trị j = i + 1
Bước 3: Trong khi j- nếu a[j] < a[i] thì hốn đổi a[i] với a[j]
- j = j + 1;
Bước 4: i = i +1
nếu iChọn một câu trả lời:
a.
Tìm kiếm nhị phân
b. Tìm kiếm tuyến tính
c. Sắp xếp chèn trực tiếp
d. Sắp xếp đổi chỗ trực tiếp
8.Cho biết đây là ý tưởng của thuật toán nào:
Xuất phát từ dãy đầu a0, a1, …, ai, xét các phần tử sau đó từ ai+1 đến an xem có phần tử nào nhỏ hơn ai
khơng thì hốn đổi vị trí => Sau mỗi lần luôn được dãy a0, a1, …, ai đã được sắp thứ tự
Chọn một câu trả lời:
a.
Ý tưởng của thuật toán sắp xếp InsertionSort
b. Ý tưởng của thuật tốn tìm kiếm tuyến tính
c. Ý tưởng của thuật tốn sắp xếp InterchangeSort
d. Ý tưởng của thuật tốn tìm kiếm nhị phân

9.Cho thuật tốn tìm nhị phân khơng đệ quy sau:
int NrecBinarySearch( int M[], int N, int X)
{


int First = 0;
int Last = N -1;
while ( First <= Last)
{
int Mid = (First + Last)/2;
if ( X == M[Mid]) return Mid;
if ( X < M[Mid]) Last = Mid - 1;
else First = Mid + 1;
}
return -1;
}
Chọn câu đúng nhất trong trường hợp tốt nhất khi phần tử ở giữa của mảng có giá trị bằng X:
Chọn một câu trả lời:
a. Số phép gán: Gmin = 3 Số phép so sánh: Smin = 2
b. Số phép gán: Gmin = 0 Số phép so sánh: Smin = 2
c. Số phép gán: Gmin = 2 Số phép so sánh: Smin = 2
Câu trả lời không đúng
d. Số phép gán: Gmin = 2 Số phép so sán: Smin = 3
10.Cho mảng a gồm các phần tử: 8, 3, 7, 6, 4, 2.
Cho biết kết quả ở bước thứ 3 khi áp dụng thuật toán sắp xếp Selection tăng dần trên mảng các phần tử trên.
Chọn một câu trả lời:
a. 2 3 7 6 4 8
b. 2 3 7 6 8 4
c. 2 3 4 6 8 7 Câu trả lời không đúng
d. 2 3 4 6 7 8

11.Cho biết kết quả của đoạn chương trình sau:
long f5(int n)
{


if (2*n==2)
return 2;
else
return 2*n + f5(n-1);
}
int main()
{
long x = f5(3);
printf("%ld", x);
getch();
}
Chọn một câu trả lời:
a. 6
b. 2
c. 12 Câu trả lời đúng
d. 10
12.Để tính biểu thức s = ½ + ¼ + … + 1/(2n) với n>=1 ta chọn hàm
Chọn một câu trả lời:
a. float F( int n )
{
if (n ==1 )
return 1.0/2;
else
return 1.0/2*n + F(n-1);
}

b. float F( int n )
{
if (n ==1 )
return 1.0/2;
else
return 1.0/n + F(n-1);
} Câu trả lời không đúng
c. float F( int n )
{


if (n ==1 )
return 1.0/2;
else
return 1.0/(2*n) + F(n-1);
}
d. float F( int n )
{
if (n ==1 )
return 1.0/2;
else
return 1.0/(2*n) + F1(n-1);
}
13.Để xác định giải thuật đệ quy cần xác định gì?
Chọn một câu trả lời:
a. Phần tử neo Câu trả lời không đúng
b. Cả hai lựa chọn đều đúng
c. Công thức tổng quát
d. Cả hai lựa chọn đều sai
14.Trong giải thuật đệ quy thì lời giải trực tiếp mà khơng phải nhờ đến một bài tốn con nào đó là thành phần

nào?
Chọn một câu trả lời:
a. Phần tử neo
b. Cả hai lựa chọn đều sai
c. Cả hai lựa chọn đều đúng
d. Công thức tổng quát
15.Cho biết kết quả sau khi thực hiện đoạn chương trình sau:
int main()
{
int a[20], n,i,k;
k = a[n-1];
for(i=n-2; i>=0; i--)
if (a[i] < k)
k = a[i];
}


Chọn một câu trả lời:
a. a[k] có giá trị lớn nhất Câu trả lời khơng đúng
b. a[k] có giá trị nhỏ nhất
c. k có giá trị nhỏ nhất
d. k có giá trị lớn nhất
16.Cho đoạn mã sau, cho biết đoạn mã biểu diễn thuật tốn gì?
Bước 1: S = 1, i = 1;
Bước 2: Nếu iNgược lại qua bước 4;
Bước 3: i = i + 1;
Quay lại bước 2;
Bước 4: Xuất S ra màn hình
Chọn một câu trả lời:

a. Tính (n-1)!
b. Tính n! Câu trả lời khơng đúng
c. Tính tổng các giá trị 1+2+3+…+n
d. Tính tổng các giá trị 1*1*2*3*…*n
Tham khảo: Tham khảo Tài liệu hướng dẫn học Bài 1 – Đánh giá thuật toán, mục V, bản Text
i = 1 => S = 1
i = 2 => S = S * i = 1*2
i = 3 => S = S * i = 1*2*3
i = 4 => S = S * i = 1*2*3*4

17.Một chương trình cài đặt trên máy tính được xác định bởi thành phần nào
Chọn một câu trả lời:
a. Không phải là các thành phần
b. Cả hai thành phần Câu trả lời đúng
c. Thuật toán
d. Cấu trúc dữ liệu
18.Đoạn mã sau đây sử dụng thuật tốn Sắp xếp gì?
void SXDSV_InsertionSort( int n, SV ds[]){ int pos,i; SV x; for(i=1;iwhile((pos>=0)&&(ds[pos].DTB>x.DTB)) { ds[pos+1] = ds[pos]; pos--; } ds[pos+1] = x; //chèn x vào dãy }}
Chọn một câu trả lời:
a. Selection Sort


b. Quick Sort
c. Insertion Sort
d. Interchange Sort Câu trả lời khơng đúng
19.Đoạn mã sau đây sử dụng thuật tốn Sắp xếp gì?
void SXDSSV( int n, SV ds[])
{
int min, i, j; SV tg;

for( i=0 ; i{ min = i; for( j=i+1 ; jif ( ds[j].DTB < ds[min].DTB ) min = j; if( min != i )
{ tg = ds[min];
ds[min] = ds[i];
ds[i] = tg; } }}
Chọn một câu trả lời:
a. Selection Sort
b. Insertion Sort
c. Quick Sort
d. Interchange Sort Câu trả lời không đúng

20.Cho thông tin của SV gồm: MaSV, HoTen, Tuoi, DTB
Đâu là đoạn mã để Sắp xếp danh sách SV theo Tuổi tăng dần bằng thuật toán Selection Sort
Chọn một câu trả lời:
a. void SXDSSV( int n, SV ds[])
{
int min, i, j; SV tg;
for( i=0 ; i{ min = i; for( j=i+1 ; jif( min != i )
{ tg = ds[min];
ds[min] = ds[i];
ds[i] = tg; } }}
b. void SXDSSV( int n, SV ds[]){ int max, i, j; SV tg; for( i=0 ; i( ds[j].Tuoi > ds[max].Tuoi) max = j; if(max!= i )
{ tg = ds[max];
ds[max] = ds[i];
ds[i] = tg; } }}
c. void SXDSV_InsertionSort( int n, SV ds[]){ int pos,i; SV x; for(i=1;i

while((pos>=0)&&(ds[pos].Tuoi

d. void SXDSV_InsertionSort( int n, SV ds[]){ int pos,i; SV x; for(i=1;iwhile((pos>=0)&&(ds[pos].Tuoi>x.Tuoi)) { ds[pos+1] = ds[pos]; pos--; } ds[pos+1] = x; //chèn x vào dãy }}
21.Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng phương pháp sắp xếp chèn trực tiếp (Insertion Sort) để sắp xếp
tăng dần, sau 2 lần lặp kết quả của dãy là thế nào?
Chọn một câu trả lời:
a. 11, 23, 42, 65, 74, 58
b. 11, 23, 42, 74, 58, 65
Câu trả lời không đúng
c. 11, 23, 58, 65, 42, 74
d. 23, 42, 74, 11, 65, 58 =>
1/23,42.74.11.65.58
2/23.42.74.11.65.58

22.Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng phương pháp sắp xếp chèn trực tiếp (Insertion Sort) để sắp xếp
tăng dần, sau 5 lần lặp kết quả của dãy là thế nào?
Chọn một câu trả lời:
a. 11, 23, 42, 58, 65, 74
b. 11, 23, 42, 74, 58, 65
c. 11, 23, 42, 65, 58, 74
d. 11, 23, 58, 65, 42, 74
23.Đoạn mã sau đây thực hiện yêu cầu xử lý gì?
int TK_SV_Ten_Tuyentinh(int n, SV ds[], char ht[])
{ for(int i = 0; iif ( strcmp(ds[i].HoTen, ht)==0)
break;
if (ireturn 1;

else return -1;}
Chọn một câu trả lời:
a. Thực hiện tìm kiếm trong danh sách ds có SV có mã là ht hay khơng? Nếu có trả lại giá trị 1 nếu khơng có trả
lại giá -1
b. Thực hiện tìm kiếm trong danh sách (ds) có SV có tên là ht hay khơng? Nếu có thì trả lại giá trị là 1,
ngược lại khơng có trả lại giá trị là -1, thuật toán sử dụng là thuật tốn tìm kiếm tuyến tính
c. Thực hiện tìm kiếm trong danh sách ds có SV có mã là ht hay khơng? Nếu có trả lại giá trị vị trí của phần tử
tìm thấy nếu khơng có trả lại giá -1 Câu trả lời khơng đúng
d. Thực hiện tìm kiếm trong danh sách ds có SV có mã là ht hay khơng? Nếu có trả lại giá trị 1 nếu khơng có trả
lại giá -1, thuật tốn sử dụng là thuật tốn tìm kiếm nhị phân
24Đoạn mã cài đặt hàm tìm kiếm nhị phân phần tử x trên dãy sắp xếp tăng dần:


int BinarySearch( int a[ ], int n, int x )
{
int left = ……….., right = ……………;
int middle;
do
{
middle = (left+right)/2;
if (x == a[middle]) break;
else if (xelse left = middle + 1;
} while ( left <= right );
if ( left <= right ) return middle;
else return -1;//ko tìm thấy phần tử x
}
Giá trị được điền vào dấu ………... để đoạn mã cài đặt thực hiện đúng:
Chọn một câu trả lời:
a. n và 1

b. 0 và n-1
Câu trả lời đúng
c. n-1 và 0
d. 1 và n
25.Cho thuật toán sau:
int LinenearSearch( int M[], int N, int X)
{
int k = 0;
while (M[k] !=X && k

k++;
if (kreturn -1;
}
Chọn câu đúng nhất trong trường hợp xấu nhất khi khơng tìm thấy phần tử nào có giá trị bằng X:
Chọn một câu trả lời:
a. Số phép gán: Gmax = 2 Số phép so sánh: Smax = 2N + 1
Câu trả lời không đúng
b. Số phép gán: Gmax = 1 Số phép so sánh: Smax = N + 2
c. Số phép gán: Gmax = 1 Số phép so sánh: Smax = 2N + 2
d. Số phép gán: Gmax = 1 Số phép so sánh: Smax = 2N + 1
26.Cho biết kết xuất của đoạn chương trình sau:
long F(int n)
{
if ((2*n+1) ==1)
return 1;
else
return (2*n+1)+F(n-1);
}

void main()
{
long x=F(3);
printf("%ld", x);
}
Chọn một câu trả lời:
a. 6
b. 9 Câu trả lời không đúng
c. 16


d. 16.00
27Cho biết kết xuất của đoạn chương trình sau:
long F(int n)
{
if ((2*n+1) ==1)
return 1;
else
return (2*n+1)+F(n-1);
}
void main()
{
long x=F(3);
printf("%ld", x);
}
Chọn một câu trả lời:
a. 6
b. 9 Câu trả lời không đúng
c. 16
d. 16.00

28.Để tính biểu thức s = ½ + 2/3 + ¾ + … + n/(n+1) ta chọn hàm
Chọn một câu trả lời:
a. float F(int n)
{
if (n==1)
return 1.0/2;
else
return (float)(n+1)/(n+1) + F(n-1);
}
b. float F(int n)
{
if (n==1)


return 1.0/2;
else
return (float)n/(n+1) + F(n-1);
}
c. float F(int n)
{
if (n==1)
return 1.0/2;
else
return (float)n/(n+1) + F (n-1);
} Câu trả lời không đúng
d. float F(int n)
{
if (n==1)
return 1.0/2;
else

return (float)n/ ( n) + F(n-1);
}
29.Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng phương pháp sắp xếp đổi chỗ trực tiếp (Interchange Sort) để sắp
xếp tăng dần, sau 3 lần lặp kết quả của dãy là thế nào?
Chọn một câu trả lời:
a. 11, 23, 42, 65, 58, 74
b. 11, 23, 42, 74, 65, 58
c. 11, 23, 42, 58, 65, 74
d. 11, 23, 42, 58, 74, 65
1 .23 42 74 11 65 58
11 42 74 23 65 58
2 .11 23 74 42 65 58
3. 11 23 42 74 65 58

30Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng phương pháp sắp xếp đổi chỗ trực tiếp (Interchange Sort) để sắp
xếp tăng dần, sau 4 lần lặp kết quả của dãy là thế nào?
Chọn một câu trả lời:
a. 11, 23, 42, 74, 65, 58
b. 11, 23, 42, 58, 74, 65
c. 11, 23, 42, 65, 58, 74
d. 11, 23, 42, 58, 65, 74
Câu trả lời không đúng
31.Cho biết kết quả của đoạn chương trình sau:


int F(int a[], int n)
{
if (n==1)
return a[0];
else

return 1 + F(a,n-1);
}
int main()
{
int a[] = {2, 3, 4, 5, 6};
printf("%d",F(a,5));
getch();
}
Chọn một câu trả lời:
a. 5
b. 4 Câu trả lời không đúng
c. 6
d. 7
31.Để tính biểu thức s = xn với n>=0 ta chọn hàm
Chọn một câu trả lời:
a. long F(int x, int n)
{
if (n==0)
return 1;
else
return x*F(x,n-1);
}
n = 0 => F(0) = 1
n = 1 => F(1) = x*F(0)
n = 2 => F(2) = x*F(1)
n = 3 => F(3) = x*F(2)
n = 4 => F(4) = x*F(3)


b. long F(int x, int n)

{
if (n==0)
return 1;
else
return x*F(x,n);
} Câu trả lời không đúng
c. long F(int x, int n)
{
if (n==1)
return 1;
else
return x*F(x,n-1);
}
d. long F(int x, int n)
{
if (n==0)
return 1;
else
return x*x*F(x,n-1);
}
32.Cho biết kết quả của đoạn chương trình sau:
long f3(int n)
{
if (n==1)
return 1;
else
return n*n + f3(n-1);
}
int main()
{

long x = f3(3);
printf("%ld", x);
getch();


}
Chọn một câu trả lời:
a. 13
b. 16
c. 14
d. 12 Câu trả lời không đúng
33.Cho biết kết quả của đoạn chương trình sau:
int F(int a[], int n)
{
if (n==1)
return a[0];
else
return a[n-1] + F(a,n-1);
}
int main()
{
int a[] = {2, 3, 4, 5, 6};
printf("%d",F(a,5));
getch();
}
Chọn một câu trả lời:
a. 20
b. 2
c. 18
d. 14 Câu trả lời không đúng

F(a,5) = a[4] + F(a,4)
F(a,4) = a[3] + F(a,3)
F(a,3) = a[2] + F(a,2)
F(a,2) = a[1] + F(a,1)


F(a,1) = a[0]

34.Các bước thực hiện tìm kiếm nhị phân phần tử x trên dẫy sắp xếp tăng dần được mơ tả như sau:
Bước 1: Khởi đầu tìm kiếm trên tất cả các phần tử của dãy c left = …………… và right = ………………
Bước 2: Tính middle = (left + right)/2. So sánh a[middle] với x. Có 3 khả năng:
- a[middle] = x => Tìm thấy => Dừng
- a[middle] > x => tiếp tục tìm x trong dãy con mới với right = middle - 1 (tìm trong nửa đầu)
- a[middle] < x => tiếp tục tìm x trong dãy con mới với left = middle + 1 (tìm trong nửa cuối)
Bước 3:
- Nếu left <= right => dãy còn phần tử, tiếp tục quay lại bước 2 để tìm kiếm tiếp
- Ngược lại => Dãy hiện hành hết phần tử và dừng thuật toán
Giá trị cần điền vào dấu ………….. là bao nhiêu để thuật toán thực hiện đúng
Chọn một câu trả lời:
a. n-1 và 0
b. 0 và n
Câu trả lời không đúng
c. n và 0
d. 0 và n-1
35.Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng phương pháp sắp xếp chèn trực tiếp (Insertion Sort) để sắp xếp
tăng dần, sau 3 lần lặp kết quả của dãy là thế nào?
Chọn một câu trả lời:
a. 11, 23, 58, 65, 42, 74
b. 11, 23, 42, 74, 65, 58
c. 11, 23, 42, 65, 74, 58 Câu trả lời không đúng

d. 11, 23, 42, 74, 58, 65
23 42 74 11 65 58
23 42 74 11 65 58
11 23 42 74 65 58


36.Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng phương pháp sắp xếp chèn trực tiếp (Insertion Sort) để sắp xếp
tăng dần, sau 2 lần lặp kết quả của dãy là thế nào?
Chọn một câu trả lời:
a. 11, 23, 58, 65, 42, 74
b. 11, 23, 42, 65, 74, 58
c. 11, 23, 42, 74, 58, 65
Câu trả lời không đúng
d. 23, 42, 74, 11, 65, 58
37.Đoạn mã sau đây sử dụng thuật tốn Sắp xếp gì?
void SXDSSV( int n, SV ds[]){ int min, i, j; SV tg; for( i=0 ; i( ds[j].DTB < ds[min].DTB ) min = j; if( min != i )
{ tg = ds[min];
ds[min] = ds[i];
ds[i] = tg; } }}
Chọn một câu trả lời:
a. Interchange Sort
b. Selection Sort
c. Insertion Sort Câu trả lời không đúng
d. Quick Sort
38Đoạn mã sau đây sử dụng thuật tốn Sắp xếp gì?
void SXDSV_InsertionSort( int n, SV ds[]){ int pos,i; SV x; for(i=1;iwhile((pos>=0)&&(ds[pos].DTB>x.DTB)) { ds[pos+1] = ds[pos]; pos--; } ds[pos+1] = x; //chèn x vào dãy }}
Chọn một câu trả lời:
a. Quick Sort

b. Selection Sort
c. Interchange Sort Câu trả lời không đúng
d. Insertion Sort
39.Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng phương pháp sắp xếp chèn trực tiếp (Insertion Sort) để sắp xếp
tăng dần, sau 5 lần lặp kết quả của dãy là thế nào?
Chọn một câu trả lời:
a. 11, 23, 42, 74, 58, 65
b. 11, 23, 42, 65, 58, 74
c. 11, 23, 58, 65, 42, 74
d. 11, 23, 42, 58, 65, 74
40.Thuật toán được biểu diễn bằng cách nào


Chọn một câu trả lời:
a. Sơ đồ khối
b. Liệt kê từng bước
c. Tất cả các cách được liệt kê
d. Giả mã
41.Trong giải thuật đệ quy thì lời giải trực tiếp mà khơng phải nhờ đến một bài tốn con nào đó là thành phần
nào?
Chọn một câu trả lời:
a. Phần tử neo Câu trả lời đúng
b. Cả hai lựa chọn đều sai
c. Cả hai lựa chọn đều đúng
d. Công thức tổng quát
42.Cho thông tin của SV gồm: MaSV, HoTen, Tuoi, DTB
Đâu là đoạn mã để Sắp xếp danh sách SV theo ĐTB giảm dần bằng thuật toán Selection Sort
Chọn một câu trả lời:
a. void SXDSSV( int n, SV ds[]){ int min, i, j; SV tg; for( i=0 ; i( ds[j].DTB < ds[min].DTB ) min = j; if( min != i )

{ tg = ds[min];
ds[min] = ds[i];
ds[i] = tg; } }} Câu trả lời không đúng
b. void SXDSSV( int n, SV ds[]){ int max, i, j; SV tg; for( i=0 ; i( ds[j].DTB > ds[max].DTB ) max = j; if(max!= i )
{ tg = ds[max];
ds[max] = ds[i];
ds[i] = tg; } }}
c. void SXDSV_InsertionSort( int n, SV ds[]){ int pos,i; SV x; for(i=1;iwhile((pos>=0)&&(ds[pos].DTBd. void SXDSV_InsertionSort( int n, SV ds[]){ int pos,i; SV x; for(i=1;iwhile((pos>=0)&&(ds[pos].DTB>x.DTB)) { ds[pos+1] = ds[pos]; pos--; } ds[pos+1] = x; //chèn x vào
43.Các bước thực hiện tìm kiếm nhị phân phần tử x trên dẫy sắp xếp tăng dần được mô tả như sau:
Bước 1: Khởi đầu tìm kiếm trên tất cả các phần tử của dãy <=> left = 0 và right = n-1
Bước 2: Tính middle = (left + right)/2. So sánh a[middle] với x. Có 3 khả năng:
- a[middle] = x => Tìm thấy => Dừng
- a[middle] > x => tiếp tục tìm x trong dãy con mới với right = middle - 1 (tìm trong nửa đầu)
- a[middle] < x => tiếp tục tìm x trong dãy con mới với ............................ (tìm trong nửa cuối)
Bước 3:


- Nếu left <= right => dãy còn phần tử, tiếp tục quay lại bước 2 để tìm kiếm tiếp
- Ngược lại => Dãy hiện hành hết phần tử và dừng thuật toán
Giá trị cần điền vào dấu ………….. là bao nhiêu để thuật toán thực hiện đúng
Chọn một câu trả lời:
a. right = middle - 1
Câu trả lời không đúng
b. right = midle + 1
c. left = middle - 1
d. left = middle + 1

44.Đoạn mã dưới đây mô tả thuật tốn gì: B1: k = 1 B2: if M[k] == X and k !=n
B2.1: k++
B2.2: Lặp lại bước 2
B3: if (kB4: else thơng báo khơng tìm thấy
B5: Kết thúc
Chọn một câu trả lời:
a. Tìm kiếm tuyến tính phần tử X trong mảng Câu trả lời đúng
b. Tìm phần tử nhỏ nhất của mảng M gồm N phần tử
c. Tìm kiếm nhị phân phần tử có giá trị X
d. Tất cả các lựa chọn trên đều sai
45.Đoạn mã sau đây sử dụng thuật tốn Sắp xếp gì?
void SXDSSV( int n, SV ds[]){ int min, i, j; SV tg; for( i=0 ; i( ds[j].DTB < ds[min].DTB ) min = j; if( min != i )
{ tg = ds[min];
ds[min] = ds[i];
ds[i] = tg; } }}
Chọn một câu trả lời:
a. Insertion Sort Câu trả lời không đúng
b. Interchange Sort
c. Quick Sort


d. Selection Sort
46.Cho mảng a gồm các phẩn tử có giá trị như sau:
3126
Số lần hoán vị 2 phần tử khác nhau khi áp dụng thuật toán đổi chỗ trực tiếp (Bubble Sort) để sắp xếp mảng
giảm dần là:
Chọn một câu trả lời:
a. 2

Câu trả lời không đúng
b. 3
c. 5
d. 4
47.Cho đoạn mơ tả sau:
Bước 1: Khởi đầu tìm kiếm trên tất cả các phần tử của dãy
(left = 0 và right = n - 1)
Bước 2: Tính middle = (left + right)/2. So sánh a[middle] với x. Có 3 khả năng:
a[middle] = x thì thơng báo Tìm thấy => Dừng
a[middle] > x thì right = middle - 1
a[middle] < x thì left = middle + 1
Bước 3:
Nếu left <= right và quay lại bước 2 để tìm kiếm tiếp
Ngược lại thơng báo khơng tìm thấy và dừng thuật tốn
Chọn một câu trả lời:
a. Mơ tả thuật tốn tìm kiếm tuyến tính
b. Các đáp án trên đều đúng
c. Mơ tả thuật tốn tìm kiếm nhị phân Câu trả lời đúng
d. Các đáp án đưa ra đều sai
48.Đoạn mã sau đây thực hiện nhiệm vụ gì
void SXDSV_InsertionSort( int n, SV ds[]){ int pos,i; SV x; for(i=1;iwhile((pos>=0)&&(ds[pos].Tuoi>x.Tuoi)) { ds[pos+1] = ds[pos]; pos--; } ds[pos+1] = x; //chèn x vào dãy }}


Chọn một câu trả lời:
a. Thực hiện sắp xếp danh sách SV theo Tuoi giảm dần bằng thuật toán Insertion
b. Thực hiện sắp xếp danh sách SV theo Tuoi tăng dần bằng thuật toán Insertion
c. Thực hiện sắp xếp danh sách SV theo Tuoi giảm dần bằng thuật toán Selection Câu trả lời không đúng
d. Thực hiện sắp xếp danh sách SV theo Tuoi tăng dần bằng thuật toán Selection
49.Đoạn mã sau đây làm nhiệm vụ gì?

void SXDSSV( int n, SV ds[]){ int min, i, j; SV tg; for( i=0 ; i< ds[min].Tuoi ) min = j; if( min != i )
{ tg = ds[min];
ds[min] = ds[i];
ds[i] = tg; } }}
Chọn một câu trả lời:
a. Thực hiện sắp xếp danh sách SV theo Tuoi tăng dần bằng thuật toán Insertion
b. Thực hiện sắp xếp danh sách SV theo Tuoi giảm dần bằng thuật tốn Insertion Câu trả lời khơng đúng
c. Thực hiện sắp xếp danh sách SV theo Tuoi giảm dần bằng thuật toán Selection
d. Thực hiện sắp xếp danh sách SV theo Tuoi tăng dần bằng thuật toán Selection
50.
51
52
53
54.
55.
56.
57.
58.
59.
60.
61.
62.
63
64.
65
66.
67.
68





×