挑战二--第五章搜索

版权声明:随便写写,也不重要,欢迎挑错讨论 https://blog.csdn.net/qq_37305947/article/details/79821091

挑战二给出的例题都比较简单,或者说前期入门题都很简单,

在搜索这一章只是介绍了 线性搜索(暴力),二分搜索,散列表(哈希表)以及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

“排序后即可使用二分搜索”,二分搜索在数据后排序后就可使用,考虑到数据的体积,排序会联系到高等排序算法~


散列法。啊好多。还是慢慢总结 今天先到这里。。。

猜你喜欢

转载自blog.csdn.net/qq_37305947/article/details/79821091