C语言如何用二分法查找一个数.我要一个例题

yinpengcheng 2010-10-13 07:24:55
C语言如何用二分法查找一个数.我要一个例题
...全文
1070 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
oliver_wei 2010-10-13
  • 打赏
  • 举报
回复
binary_search
tangxianghenggood 2010-10-13
  • 打赏
  • 举报
回复
好像没人回帖,楼主结贴率不高啊
/*
折半查找;
使用范围: 查找中的元素为有序的
过程: 不断减少查找的次数,去真个元素的中间值与要查找的元素相比较,如果查找元素大于中间元素,那那
要查找的元素在真个数据的左半边,否则在右半边 ,通过控制下标就可以实现了


*/
#include<iostream>
using namespace std;
//计数输入的数据元素

void Input(int a[],int n); //.数据输入
void Output(int a[],int n);
void Search(int c[],int n); //折半查找
void Sort(int c[],int n);

int main()
{
int num[100];

int ncount;
while (1)
{
cout<<"输入数据元素个数:";
cin>>ncount;

Input(num,ncount); //输入数据元素

Sort(num,ncount); // 给元素排序

Output(num,ncount); //输出排好序的元素

Search(num,ncount); //查找
}
system("pause");
return 0;
}

//////////////////////
void Input(int a[],int n) //.数据输入
{
int i;
cout<<"输入整数:"<<endl;
for (i=0; i<n; i++)
{
cin>>a[i];
}
}

////////////////////////////////
void Output(int a[],int n) //数据输出
{
cout<<"输入的数据排好序后如下:"<<endl;
for (int i=0; i<n; i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}

////////////////////////////////
void Sort(int c[],int n)
{
int i,j,temp;

//对元素进行排序 冒泡
for (i=0; i<n; i++)
{
for (j=0; j<n-i-1; j++)
{
if (c[j]>c[j+1])
{
temp = c[j];
c[j] = c[j+1];
c[j+1] = temp;
}
}
}
}
///////////////////////////////
void Search(int c[],int n) //折半查找
{
int i,j;
int num; //要查找的数

//折半查找
int low = 0; //最低下标
int hig =n-1; //最高下标
int midd; //最中间元素

cout<<"输入要查找的数:";
cin>>num;
cout<<endl;


for (i=0; i<=n/2; i++) //折半查找次数
{
midd = c[(low+hig)/2]; //取中间元素

if (num>midd) //要查找的数大于中间的数
{
low = (low+hig)/2+1; //那要找的数就在中间以后的数中
}
else if (num == midd)
{
break;
}
else //要查找的数小于中间的数
{
hig = (low+hig)/2-1; //要找的数在开始到中间的数字中
}
}
if (num != midd)
{
cout<<"数据中不存在你要找的数据!"<<endl;
}
else
{ // 输出要查找元素是所以元素中的第几个
cout<<num<<"是数据的第"<<(low+hig)/2+1<<"个元素!"<<endl;
}
}
推荐资料 比较有用,望有帮助
这些程序是我自己一个一个写的,现拿出来让和我一样的初学者分享一下,用的是dev C++ 编译,
里面包括详细的分析过程和代码注释,有两个文件,一个是c++/c 基础的,另一个是基础提高篇,
我相信对初学者是有很大的帮助的! 同时里面有运行的图片,下载的同学可以先看题目,然后在自己去做,
在和我比较一下思路,我写的不是很好的地方还望赐教

下载地址:http://tangxianghenggood.download.csdn.net/

下面的是强化训练
这个系统是用DEV c++ 写的,上面注释也很详细,对于练技术还是很有用的,以前看很多人说做dos没界面,
不好用,这个可以让你深刻的学习一下的!直接用dev c++ 打开 可以直接编译运行

http://d.download.csdn.net/down/2746868/tangxianghenggood

可以训练的好帮手, 个人极力推荐 送给有心人
somebody 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ayw215 的回复:]
int BSearch(elemtype a[],elemtype x,int low,int high)/*在下届为low,上界为high的数组a中折半查找数据元素x*/
{
int mid;
if(low>high) return -1;
mid=(low+high)/2;
if(x==a[mid]) return mid;
if(x<a[mid]) retur……
[/Quote]
答案已出,可以结贴
ayw215 2010-10-13
  • 打赏
  • 举报
回复
int BSearch(elemtype a[],elemtype x,int low,int high)/*在下届为low,上界为high的数组a中折半查找数据元素x*/
{
int mid;
if(low>high) return -1;
mid=(low+high)/2;
if(x==a[mid]) return mid;
if(x<a[mid]) return(BSearch(a,x,low,mid-1));
else return(BSearch(a,x,mid+1,high));
}

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧