首页 > 编程语言 > 详细

C++ 折半查找

时间:2015-11-12 11:27:28      阅读:557      评论:0      收藏:0      [点我收藏+]

静态查找表中折半查找算法的实现

注意:折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列

#include<iostream>
using namespace std;
#define ENDFLAG 10000
typedef int KeyType;
typedef char * InfoType;
typedef struct
{
 KeyType key;
 InfoType otherinfo;
}ElemType;
typedef struct
{
 ElemType *R;
 int length;
}SSTable;
void CreateSTable(SSTable &ST,int n)
{
 int i;
 ST.R=new ElemType[n+1];
 cout<<"请输入"<<n<<"个测试数据:";
 for(i=1;i<=n;i++)
  cin>>ST.R[i].key; 
 ST.length=n;
}
int Search_Bin1(SSTable ST,KeyType key)
{
 int low,high,mid;
 low=1;
 high=ST.length;
 while(low<=high)
 {
  mid=(low+high)/2;
  if(key==ST.R[mid].key) return mid;
  else if(key<ST.R[mid].key) high=mid-1;
  else low=mid+1;
 }
 return 0;
}
int Search_Bin2(SSTable ST,int low,int high,KeyType key)
{
 int mid;
 if(low>high) return 0;
 mid=(low+high)/2;
 if(key==ST.R[mid].key) return mid;
 else if(key<ST.R[mid].key) return Search_Bin2(ST,low,mid-1,key);
 else return Search_Bin2(ST,mid+1,high,key);
}

void main()
{
 int n;
 KeyType key;
 SSTable ST;
 cout<<"请输入静态查找表长:";
 cin>>n;
 CreateSTable(ST,n);
 cout<<"请输入待查记录的关键字:";
 cin>>key;
 cout<<"Search_Bin1算法计算的位置为:"<<Search_Bin1(ST,key)<<endl;
 cout<<"Search_Bin2算法计算的位置为:"<<Search_Bin2(ST,1,ST.length,key)<<endl;
}

C++ 折半查找

原文:http://www.cnblogs.com/YY-Xcode/p/4958204.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!