Câu 2 Chương 2

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 1

// Câu 2: Hãy cải tiến giải thuật tìm kiếm tuyến tính để có thể liệt kê tất cả vị

trí xuất hiện của khóa tìm kiếm


//Hàm LinearSearch() trả về i là vị trí của x trong mảng nếu tìm thấy x, ngược lại
trả về -1.

int LinearSearch(int a[], int n, int x)


{
int i=0;
while((i<n)&&(a[i]!=x)){
i++;
}
if(i==n){
return -1;//Tìm không thấy x
}
else{
return i;//Tìm thấy x
}
}
//Thuật toán tìm kiếm tuyến tính sử dụng 2 phép so sánh là i<n và a[i]!=x. Trường
hợp xấu nhất, mỗi phép so sánh này đều có thể thực hiện n lần. Do đó, số phép so
sánh của thuật toán trong trường hợp xấu nhất là 2*n. Độ phức tạp của thuật toán là
O(n).
int LinearSearch(int a[], int n, int x){
int i=0; a[n]=x; //a[n] là phần tử “lính canh”
while(a[i]!=x){
i++;
}
if(i==n){
return -1; //Tìm không thấy x
}
else{
return i; //Tìm thấy x
}
}
//Thuật toán tìm kiếm tuyến tính cải tiến chỉ sử dụng 1 phép so sánh a[i]!=x.
Trường hợp xấu nhất, số phép so sánh của thuật toán là n. Tức là giảm được phân nữa
phép so sánh của thuật toán tìm kiếm thông thường.
// nếu dùng vòng lặp for thì code là tối ưu nhất , maybe
int search(int arr[], int n, int x)
{
for (int i = 0; i < n; i++)
if (arr[i] == x)
return i;
return -1;
}

You might also like