社区
C语言
帖子详情
C语言如何用二分法查找一个数.我要一个例题
yinpengcheng
2010-10-13 07:24:55
C语言如何用二分法查找一个数.我要一个例题
...全文
1127
4
打赏
收藏
C语言如何用二分法查找一个数.我要一个例题
C语言如何用二分法查找一个数.我要一个例题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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));
}
c语言
数
组中找最接近的
数
_第六讲:
C语言
基础之
数
组,第二节,C必学知识点...
本文约3700字,主要讲了
C语言
基础之
数
组,一维
数
组的初始化,二维
数
组的初始化、定义、引用以及案例;二维
数
组二分法以及
例题
。
数
组又可分为
数
值
数
组、字符
数
组、指针
数
组、结构
数
组等各种类别。带你进入
C语言
的世界,入门
C语言
,后边将持续更新。可以收藏学习。想了解
数
组的基础概念,一维
数
组的定义和引用等,请点击该处跳转阅读。本文全干货,新手必备,感谢你的阅读,祝你学有所成,生活愉快!一、一维
数
组1.一维
数
组...
c语言
讲两个
数
组合并_第六讲:
C语言
基础之
数
组,第二节,C必学知识点
本文约3700字,主要讲了
C语言
基础之
数
组,一维
数
组的初始化,二维
数
组的初始化、定义、引用以及案例;二维
数
组二分法以及
例题
。
数
组又可分为
数
值
数
组、字符
数
组、指针
数
组、结构
数
组等各种类别。带你进入
C语言
的世界,入门
C语言
,后边将持续更新。可以收藏学习。想了解
数
组的基础概念,一维
数
组的定义和引用等,请点击该处跳转阅读。本文全干货,新手必备,感谢你的阅读,祝你学有所成,生活愉快!一、一维
数
组1.一维
数
组...
C语言
经典100题——用二分法在
一个
有序
数
组中查找某个
数
字
<1>题目描述 有15个
数
按由大到小顺序放在
一个
数
组中,输入
一个
数
,要求用折半查找法找出该
数
是
数
组中第几个元素的值。如果该
数
不在
数
组中,则输出“无此
数
” <2>思路分析 记录
数
组中左边第
一个
元素的下标为left,记录
数
组右边第
一个
元素的下标为right,记录中间元素的下标为mid(mid = left+right) 当输入的
数
在a[mid]的左边时,将right改成mid-1,同时mid = (left+right)/2;当输入的
数
在a[mid]的右边时,将left改成mid
C语言
二分法查找
二分查找也叫折半查找 典型算法: 算法:当
数
据量很大适宜采用该方法。采用
二分法查找
时,
数
据需是排好序的。 基本思想:假设
数
据是按升序排序的,对于给定值n,从序列的中间位置mid开始比较, 如果当前位置arr[mid]值等于n,则查找成功; 若n小于当前位置值arr[mid],则在
数
列的前半段中查找,arr[left,mid-1]; 若n大于当前位置值arr[mid],则在
数
列的后半段中继续查找arr[left+1,right], 直到找到为止,时间复杂度:O(log(n)) 。 解题思路: 给定
一个
数
组ar
C语言
专题:二分法
例题
因为立方根的性质,如果 x 是正
数
,那么它的立方根也为正
数
;所以可以根据 x 的正负来确定查找区间,然后在这个区间内通过二分法不断逼近立方根的精确值,直到满足一定的精度要求。假设
一个
数
组按升序排序后在某个点上进行了旋转(例如,[0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2]),找出该
数
组中的最小值。在二分查找过程中,不断计算中间值 mid,并比较 mid 的立方与 x 的大小关系,根据比较结果更新左右边界。当左右边界的差值小于精度时,认为找到了近似的立方根,返回左右边界的平均值。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章