顺序查找
基本思想:从数组的首元素开始,将元素逐个与待查找的关键字进行比较,直到找到相等的为止。若整个数组中没有与待查找元素相等的元素,则查找不成功。时间复杂度 $ O(n)$。
int seqSearch(int a[], int n, int key)
{
for(int i = 0; i < n; i++)
{
if(a[i] == key)
return i;
}
return -1;
}
折半查找
适用于在一个元素排列有序的数组中进行查找。
基本思想:对于已排序的序列,经过一次比较后,可将序列分割成两部分,然后只在有可能包含待查找元素的一部分中继续查找,,并根据试探结果继续分割,逐步缩小查找范围,直至找到或找不到为止。
int binarySearch(int a[], int n, int key)
{
int low = 0;
int high = n - 1;
while(low <= high)
{
int mid = (low + high) / 2;
if(key == a[mid])
return mid;
else if(key < a[mid])
high = mid - 1;
else
low = mid + 1;
}
return -1;
}