#include "stdafx.h"
#include <iostream.h>
#include <malloc.h>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//顺序表上的查找
int const maxsize=10;
typedef struct
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
int key;
}rec;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
typedef struct
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
rec item[maxsize+1];
int n; //最后一个元素下标
}sqtable;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
int search_sqtable(sqtable R,int key)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
//设置第0个元素为待查键,它起岗哨的作用,保证循环肯定有匹配的键.没有用正常的循环过程是为了减化操作,提高效率
R.item[0].key=key;
int i=R.n;
while(R.item[i].key!=key)
i--;
return i;
}
//我的书中在讲此节时错误很多,多为印刷错误,我的书应该是正版的,不知道其它如何.书中的
int binsearch(sqtable R,int key)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
int low=1,hig=R.n;
while(low<=hig)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
int mid=(low+hig)/2;
if (R.item[mid].key==key)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return mid;
}
else if (R.item[mid].key>key)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
low=mid+1; //书中此处为low=low+1,应该是印刷错误,此处改为low=mid+1
}
else if (R.item[mid].key<key)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
hig=mid-1;
}
}
return 0;
}
int main(int argc, char* argv[])
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
sqtable table;
for(int i=1;i<11;i++)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
table.item[i].key=i+100;
}
table.n=5;
cout<<"使用顺序查找:"<<search_sqtable(table,103)<<endl;
cout<<"使用二分查找:"<<binsearch(table,103)<<endl;
return 0;
}
一点说明:为什么在标题中要嵌入英文?原因是为了能够让国外的网友能查询到这篇文章。平常在Google上查资料的时候,经常参考国外网友的博客,帮助我解决了很多问题,所以我也想让他们能够参考我写的内容。当然文中我不可能全部译为英文,所以我尽量把代码粘全,靠代码说话吧。