挑战二给出的例题都比较简单,或者说前期入门题都很简单,
在搜索这一章只是介绍了 线性搜索(暴力),二分搜索,散列表(哈希表)以及STL里二分搜索lower_bound()用法。
个人觉得哈希。。。。emmm加油。
线性搜索
线性搜索就是从数组开头顺次访问各元素,检查该元素是否与目标值相等。以单项等也返回该元素的位置并结束搜索。如果检查到结束也未发现目标值,则返回特殊值说明该情况。效率低但是适用于任何形式数据
二分搜索(二分查找)
对有序数组处理可快速搜索到目标值。
二分搜索算法:
1.将整个数组作为搜索范围。
2.检查位于搜索范围正中央的元素
3.如果中央元素的关键字与目标关键字一致则结束搜索
4.如果中央元素小于目标,则以前半部分为搜索范围重新搜索;如果大于,则以后半部分为搜索范围重新搜索
散列法
在散列法中,各个元素的存储位置又散列函数决定。散列既是一种数据结构,同时也是一种使用散列表的算法。这种算法只需要将元素的关键字带入特定函数便可找出其对应位置,对某些种类的数据有着极高的搜索效率。
STL标准库搜索
迭代器:迭代器是一种对象,用于对STL容器的元素进行迭代处理。它指向容器内部的特定位置。
迭代器优势在于:对任何种类的容器都可以用同一种方法(语法)顺次访问其元素。此外,在处理数组元素时,它还可以当做C/C++的指针来用。
二分搜索方面,STL在库中提供了 binary_search、lower_bound 、upper_bound 在书里介绍的是lower_bound...(准备再去看看其他两个,然后会再详细学习一下吧)
lower_bound 是一种应用与有序数据范围内的算法,他可以返回一个迭代器,这个迭代器指向第一个不小于指定值value的元素。
用法:lower_bound(a, a + n, x)
a,a+n 指定搜索范围,x为所搜索的关键字值。
—————————————————————————————————————————————————————
二分搜索伪代码
binarySearch(A,key)
left = 0;
right = n ;
while left < right
mid = lift + right
mid / = 2
if A[mid] == key
return mid
else if key < A [mid]
right = mid
else left = mid + 1
return NOT_FOUND
“排序后即可使用二分搜索”,二分搜索在数据后排序后就可使用,考虑到数据的体积,排序会联系到高等排序算法~
散列法。啊好多。还是慢慢总结 今天先到这里。。。