二分查找的实现

 二分查找又称折半查找,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。折半搜索每次把搜索区域减少一半,时间复杂度为Ο(logn)。

优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。

算法要求:

  1. 必须采用顺序存储结构。
  2. 必须按关键字大小有序排列。

 

二分查找的递归实现

 1 int Search(int ST[],int low,int high,int key)
 2 {
 3     int mid;
 4     while(low<=high)
 5     {
 6         mid=(low+high)/2;
 7         if(key==ST[mid])
 8         {
 9             cout<<"所查找的为第"<<mid+1<<""<<endl;
10             return mid;
11         }
12         else if ((ST[low]<=ST[high]&&ST[mid]<=key)||(ST[low]>ST[high]&&ST[mid]>=key))
13             return Search(ST,mid+1,high,key);
14         else
15             return Search(ST,low,mid-1,key);
16     }
17     cout<<"不存在该元素"<<endl;
18     return 0;
19 }

 

posted on 2017-06-29 15:09  Arthurian  阅读(248)  评论(0编辑  收藏  举报