数据结构-两种常见的查找算法
查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算
顺序查找算法
算法思想:
- 顺序查找也称为线形查找,就是从表的一端开始逐个扫描表中各元素,直到找到目标,或者到达表的令一端即查找失败。
- 时间复杂度为:O(n)
算法实现 算法的c++实现,实现代码来自王治和教授数据结构课堂的总结
enum error_code{
success,not_present
};
error_code sequentialSearch(int entry[],int size,int target,int &position){
position=size;
entry[0]=target;
while(entry[position]!=target)
position--;
if(position!=0)
return success;
else
return not_present;
}
二分查找算法
限制条件
- 要查找的表是有序的,也就是说表中元素已经按照关键码的顺序存储
- 表采用顺序存储方式
算法思想
- 对于一个有序表来说,二分查找就是把查找目标与表中间的元素进行比较,如果相等则找到,如果查找目标小于中间元素,则在前一半查找,否则就在后一半查找
- 算法时间复杂度为O(logn)
算法实现
int binarySearch(int a[],int len, int x)
{
int mid; // 中间下标
int low=0; // 区间的左端下标
int high=len-1; // 区间的右端下标
while(low <= high)
{
mid = low + (high-low)/2; // 计算中间下标, 若使用(low+high)/2可能会有整数溢出:当low和high的值较大时(接近整型数所能表示的范围),low+high的值就会溢出
if(x==a[mid])
return mid; // 若找到返回元素的下标
else if(x>a[mid])
low=mid+1; // 在右半边区间搜索
else
high=mid-1; // 在左半边区间搜索
}
return -1; // 没有找到
}