Tìm kiếm
Bài học 20 trên 23 trong khóa học C++ - Thư viện mẫu chuẩn của Coddy.
Tìm kiếm là quá trình xác định vị trí của một phần tử cụ thể trong một dãy phần tử.
Thuật toán tìm kiếm là thuật toán nhận một đối số x và cố tìm phần tử có giá trị là x trong một tập hợp giá trị cho trước. Vì vậy, việc tìm kiếm phần tử có giá trị đó có thể không thành công nếu phần tử ấy không tồn tại.
Có nhiều kỹ thuật và phương pháp tìm kiếm, nhưng trong C++ bạn sẽ học về:
- Tìm kiếm tuyến tính
- Tìm kiếm nhị phân
Tìm kiếm tuyến tính
Tìm kiếm tuyến tính là kỹ thuật tìm kiếm cơ bản nhất và cũng dễ triển khai trong C++. Như tên gọi, trong tìm kiếm tuyến tính, khóa cần tìm được so sánh lần lượt với từng phần tử của dãy dữ liệu cho đến khi tìm thấy hoặc dãy kết thúc.

Linear Search(sequence, key)
for each item in sequence:
if item == key
return item's indexTrong code thực tế, tìm kiếm tuyến tính sẽ trông như thế này:
int linear_search(int array[], int n, int x)
{
for(int i = 0; i < n; i++)
if(array[i] == x)
return i;
return 0;
}
int main()
{
int array[] = {1, 2, 3, 4, 5};
int n = 5;
int x = 3;
cout << "The index of the element " << x << " is " << linear_search(array, n, x);Output:
The index of the element 3 is 2Như bạn có thể thấy trong đoạn code trên, hàm tìm kiếm tuyến tính về cơ bản sẽ lặp qua dãy phần tử cho đến khi tìm thấy kết quả khớp. Nếu không tìm thấy kết quả khớp, hàm sẽ trả về -1.
Tìm kiếm nhị phân
Tìm kiếm nhị phân là một thuật toán tìm kiếm vị trí của một phần tử, nhưng mảng phải được sắp xếp.
Thuật toán tìm kiếm nhị phân sử dụng kỹ thuật "chia để trị" để tìm khóa. Dãy phần tử liên tục được chia đôi, rồi thuật toán tìm phần tử trong nửa gần với vị trí cần tìm hơn.
Giả sử chúng ta đang tìm phần tử x = 4




Đây là dạng code của thuật toán tìm kiếm nhị phân.
int binarySearch(int array[], int x, int left, int right) {
while (left <= right) {
int mid = left + (right - left) / 2;
if (array[mid] == x)
return mid;
if (array[mid] < x)
left = mid + 1;
else
right = mid - 1;
}
return -1;
}
int main()
{
int array[] = {1, 5, 8, 10, 20};
int x = 10;
int n = 5;
int result = binarySearch(array, x, 0, n - 1);
if(result == -1)
cout << "Not found.";
else
cout << "The element is found at " << result;Output:
The element is found at 3Hãy nhớ tìm kiếm là gì, mục đích của nó và chúng ta dùng nó để làm gì. Hãy nhớ cách triển khai tìm kiếm tuyến tính và tìm kiếm nhị phân. Tiếp tục luyện tập các kỹ thuật nâng cao trong C++ thông qua các bài tập.
Thử thách
Trung bìnhBạn được cung cấp 10 số từ đầu vào. Ở dòng tiếp theo là một số N. Dòng thứ ba có N số, cho biết vị trí của các phần tử bạn cần in ra màn hình.
Đầu vào
10 20 30 40 50 60 70 80 90 100
3
20
50
80
Đầu ra
1 4 7
Tự làm thử
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
// Enter your code here
int main()
{
// Enter your code here
return 0;
}Tất cả bài học trong C++ - Thư viện mẫu chuẩn
Tự luyện tập: Trình biên dịch C++ online