各种查找算法

一、顺序查找

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

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

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

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

如果要查找的元素大于中间元素,则从数组大于中间元素的那一半查找;如果小于中间元素,则从小于中间元素的那一半查找;否则就是没有找到。

时间复杂度为O(logn).

代码如下:

 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 }

 

三、二叉排序树查找


使用条件:先创建二叉排序树:

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

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

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

算法原理:

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

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

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

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

4.查找右子树。

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

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

 

posted @ 2015-06-02 17:36  海东青飞吧!  阅读(223)  评论(0编辑  收藏  举报