📅  最后修改于: 2023-12-03 15:27:33.072000             🧑  作者: Mango
线性搜索是在一个数据集合中按顺序查找一个特定的值的过程。它从第一个元素开始,逐个地比较每个元素,直到找到所需的元素或搜索完整个数据集。
int linearSearch(int arr[], int n, int x)
{
int i;
for(i = 0; i < n; i++)
{
if(arr[i] == x)
return i;
}
return -1;
}
在最坏的情况下(即所搜索的元素位于列表的末尾),线性搜索需要进行 $n$ 次比较,所以时间复杂度为 $O(n)$。
二进制搜索(也称为折半搜索)是一种高效的搜索算法,它利用了有序数列的特性。它首先将数据集合按升序或降序排序,然后重复地将数据集合分成两半并查找目标值,直到找到所需的元素或直到剩下一个元素为止。
int binarySearch(int arr[], int l, int r, int x)
{
while(l <= r)
{
int mid = l + (r - l) / 2; // 计算中间位置
if(arr[mid] == x)
return mid;
if(arr[mid] < x)
l = mid + 1; // 在右半部分继续搜索
else
r = mid - 1; // 在左半部分继续搜索
}
return -1; // 没有找到
}
在最坏的情况下(即搜索的元素位于列表的末尾或不在列表中),二进制搜索需要进行 $log_2n$ 次比较,所以时间复杂度为 $O(log_2n)$。