二分查找(递归和非递归)

来源:互联网 发布:航天信息的开票软件 编辑:程序博客网 时间:2024/05/03 04:46

/*
二分查找也叫折半查找,要求查找的序列必须是有序的。
1.将给定的关键字与中间位置的纪录比较,如果相等则查找成功.
2.若不等则利用关键字的位置对表分成前后两个字表,如果key比中间位置关键字小,
 则下一次只在前一子表中继续查找,否则在后一子表中查找
3.重复1.2 知道查找成功,或者当前查找区间为空,则查找失败

 二分查找也可以递归
*/
//非递归
#include <iostream>
#define MAXSIZE 15
using namespace std;
int Binarysearch1(int a[],int x,int low,int high)
{
 int mid = (low + high)/2;
 while(low <= high)
 {
  if(x == a[mid])return mid;
  else
   if(x < a[mid])high = mid - 1;
   else
    low = mid + 1;
   mid = (low + high)/2;
 }
 return 0;
}
int Binarysearch2(int a[],int x,int low,int high)
{
 if(low <= high)
 {
  int mid = (low + high) / 2;
  cout<<mid<<endl;
  if(x == a[mid])return mid;
  else
   if(x < a[mid])
    return Binarysearch2(a,x,low,mid - 1);
   else
    return Binarysearch2(a,x,mid + 1,high);
   

 }
 else
  return 0;
}
int main()
{
 int a[MAXSIZE] = {0,7,9,10,15,23,30,35,36,41,43,49,60,70,80};
 int pos;
 int x = 41;
 cout<<"非递归"<<endl;
 pos = Binarysearch1(a,x,1,MAXSIZE-1);
 if(pos != 0)
 cout<<"要查找元素的位置为:"<<pos<<endl;
 else
  cout<<"要查找的元素不存在!"<<endl;


 cout<<"递归"<<endl;
 pos = Binarysearch2(a,x,1,MAXSIZE-1);
 if(pos != 0)
 cout<<"要查找元素的位置为:"<<pos<<endl;
 else
  cout<<"要查找的元素不存在!"<<endl;
 return 0;
}

原创粉丝点击