各类查找算法

1、顺序查找算法

顺序查找比较简单,这里就不用代码实现了,其原理就是按顺序比较每一个元素,直到找到关键字。数组

其时间复杂度为O(n).spa

2、二分查找(折半查找)code

原理是:查找过程从数组的中间元素开始,若是中间元素正好是要查找的元素,则查找过程结束;blog

若是要查找的元素大于中间元素,则从数组大于中间元素的那一半查找;若是小于中间元素,则从小于中间元素的那一半查找;不然就是没有找到。排序

时间复杂度为O(logn).博客

代码以下:class

 1 int binary_search(int *a,int len,int key)
 2 {
 3     int low=0 4     int high=len-1;
 5     while(low<=high)
 6     {
 7         int mid=(low+high)/2;
 8         if(a[mid]==key)
 9         {
10             return mid;
11         }
12         //在左边找
13         else if(a[mid]>key)
14         {
15             high=mid-1;
16         }
17         //在右边找
18         else if(a[mid]<key)
19         {
20             low=mid+1;
21         }
22         //没找到该值
23         else 
24             return -1;
25     }
26 }

 

3、二叉排序树查找原理


使用条件:先建立二叉排序树:搜索

1.若它的左子树不为空,则左子树上全部结点的值均小于它的根结点的值。

2.若它的右子树不空,则右子树上全部结点的值均大于它的根结点的值。

3.它的左、右子树也分别为二叉排序树。

算法原理:

在二叉排序树b中查找key的过程以下:

1.若b是空树,则搜索失败,不然:

2.若key等于b的根节点的数据域的值,则查找成功;不然

3.若key小于b的根节点的数据域的值,则查找左子树;不然

4.查找右子树。

时间复杂度为:O(log2(n)).

代码将在下篇博客中实现。

相关文章
相关标签/搜索