顺序查找
顺序查找也称为线形查找,属无序查找算法
查找方式 : 从线性表一端开始顺序扫描,依次将扫描到的结点值与定值比较,若相等则查找成功;若扫描结束仍没有找到则查找失败。
平均查找长度 : ASL = 1/n(1+2+3+…+n) = (n+1)/2 ;
时间复杂度 : O(n)
template<class T>
int sequenceSearch(vector<T> v,T value){
for(int i = 0,size = v.size();i < size;i++){
if(v[i] == value){
return i;
}
}
return -1;
}
二分查找
- 待查找元素必须有序,若无序则先进行排序
- 也称为折半查找,属有序查找算法
- 查找方式 : 用给定值先与表中间结点值比较:若相等则查找成功;若定值小于中间值则继续查找表左半部分;否则查找表右半部分
template<class T>
int binarySearch(vector<T> v,T value){
int left = 0;
int right = v.size()-1;
int mid;
while(left <= right){
mid = (left + right)/2;
if(v[mid] == value){
return mid;
}
if(v[mid] > value){
right = mid - 1;
}
if(v[mid] < value){
left = mid + 1;
}
}
return -1;
}