当前位置:首页 » 操作系统 » 二分搜索算法

二分搜索算法

发布时间: 2022-01-12 03:48:43

‘壹’ 二分搜索算法

#include <stdio.h>

#include <stdlib.h>

int a[100]={1,2,3,5,12,12,12,15,29,55};//数组中的数(由小到大)

int k;

void found(int &x,int &y,int k) //在x与y之间,要找k

{

if(x>y)return;

int m=x+(y-x)/2;

if(a[m]==k)x=y=m;

else if(a[m]>k)found(x,y=m-1,k);//找左边

else found(x=m+1,y,k);//找右边

}

int main()

{ int i=0,j=9;

scanf("%d",&k);//输入要找的数字k

found(i,j,k);//从数组a[0]到a[9]中找k

if(i==j)printf("a[%d]==%d ",i,k);

else printf("a[%d]==%d a[%d]==%d, k==%d ",j,a[j],i,a[i],k);

return 0;

}

‘贰’ 二分搜索算法是利用什么实现的算法

根据分治策略来实现

‘叁’ C语言递归函数如何实现二分搜索算法

折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是,已知一个有n个元素的有序序列, 将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数组a的右半部继续搜索x, 直到找到x或者是没有找到!

如果是常规的方法的话那么我们可以通过循环的方式, 按照上面说的算法, 找到则退出循环, 否则继续循环直到左下标位置小于或者等于右下标的位置.

按兄弟你的意思是要用递归方法进行搜索, 那么大概还是上面的算法, 只是把循环的方式改成递归方式: 如果没找到,则确定新的搜索范围, 即左右下标新位置, 然后把新的参数传给函数继续调用函数进行递归搜索!!

递归方式实现详细代码如下:

#include <stdio.h>

#define ARRAY_SIZE 10
#define NOT_FOUND -1

int BinarySearch(int array[], int left, int right, int NumToSearch)
{
int mid = (left + right) / 2;

if (left <= right)
{
if (NumToSearch == array[mid])
{
return mid;
}
else if (NumToSearch < array[mid])
{
right = mid - 1;
return BinarySearch(array, left, right, NumToSearch);
}
else
{
left = mid + 1;
return BinarySearch(array, left, right, NumToSearch);
}
}

return NOT_FOUND;
}

int main()
{
int a[ARRAY_SIZE] = {2, 5, 6, 7, 13, 20, 22, 27, 112, 222};//假设一个已知的有序且是升序数列
int result = 0;//查找的结果
int x = 13;//假设我们要查找的数是13
int left = 0;//序列开始下标
int right = ARRAY_SIZE - 1;//序列结尾下标

result = BinarySearch(a, left, right, x);
if (result == NOT_FOUND)
{
printf("Not Found!\n");
}
else
{
printf("Found %d in array a, it is a[%d]\n", x, result);
}

return 0;

}

希望对兄弟你有帮助!

‘肆’ 二分搜索算法的实现

二分搜索的时候,是要慢慢缩小搜索范围的。比如一共有10个,那么middle是5,下一层搜索的范围应该是1-4和6-10。你的函数里没有这个功能。搜索函数至少应该是int BinarySearch(Type a[], const Type& x,int left, int right);终止条件就是if(left > right) 你定义y的时候是在main函数里,所以BinarySearch里面不能直接用y,解决方式是在外部定义一个全局的y变量,或者把y变量传到函数里。

‘伍’ 实现二分搜索算法,并分析其时间复杂度

对于这样一个谓词f(),满足性质:若f(a)=true,则对于任意定义域内的b>a,f(b)=true.
l与r为值域
int work ( int begin , int end ) {
while ( end - begin != 1 ) {
const int middle = ( begin + end ) / 2 ;
if ( f ( middle ) ) end = middle ;
else begin = middle ;
}
return begin ;
}
返回的是最大的x使f(x)为否

‘陆’ 改写二分搜索算法

小于x的最大元素在x的左边(x不存在时),大于x的最小元素在x的右边(x不存在时);所以比较到最后,如果找到x,则输出x的位置,没找到x时,返回最后的位置的左和右位置

#include <stdio.h>
int main(){
int ip[100],n,key,i,mid,lt=0,rt,fg=0;
printf("请输入数组长度:");
scanf("%d",&n);
printf("请输入已排序的数组:");
for(i=0;i<n;i++)
scanf("%d",ip+i);
printf("请输入待查找数:");
scanf("%d",&key);
rt=n-1;mid=n/2;
while(mid!=lt)
{
if(ip[mid]==key)
{
fg=1;
break;
}
else
if(ip[mid]>key)
{
rt=mid;
mid=(lt+mid)/2;
}
else
{
lt=mid;
mid=(rt+mid)/2;
}
}
if(fg)
printf("%d\n",mid+1);
else
printf("%d %d\n",mid+1,mid+2);
return 0;
}

‘柒’ 二分搜索问题

vara:array[1..10]ofinteger;i,j,n,x:integer;beginwriteln('输入10个从小到大的数:');fori:=1to10doread(a[i]);writeln('输入要查找的数:');readln(x);i:=1;n:=10;j:=trunc((i+n)/2);repeatifa[j]>xthenbeginn:=j-1;j:=trunc((i+j)/2)endelseifa[j]=n);{为什么是这个结束循环条件}ifa[j]=xthenwriteln('查找成功!位置是:',j:3)elsewriteln('查找失败,数组中无此元素!')end.

‘捌’ 二分查找算法

前提要求数据排好序,有递归和非递归版本
int binSearch(const int *Array,int start,int end,int key)
{
int left,right;
int mid;
left=start;
right=end;
while (left<=right) { /注释中为递归算法,执行效率低,不推荐
mid=(left+right)/2;
/* if (key<Array[mid]) {
return(binSearch(Array,left,mid,key));
}
else if(key>Array[mid]){
return (binSearch(Array,mid+1,right,key));
}
else
return mid;
*/
if (key<Array[mid]) {
right=mid-1;
}
else if(key>Array[mid]){
left=mid+1;
}
else
return mid;
}
return -1;
}

‘玖’ 用c++语言实现二分搜索算法

这个就是二分法排序函数的源代码 传入参数是数组a和数组的大小n
template <class T>
void BinSort( T a[], int n ) {
int low,high,mid;
for (int i=1; i<n; i++) {
T t=a[i];
low=0; high=i-1;
while (low<=high) {
mid=(low+high)/2;
if (a[mid]>t) high=mid-1;
else low=mid+1;
}
for (int j=i-1; j>=high+1; j--) a[j+1]=a[j];
a[high+1]=t;
}
}

热点内容
循迹小车算法 发布:2024-12-22 22:28:41 浏览:82
scss一次编译一直生成随机数 发布:2024-12-22 22:04:24 浏览:956
嫁接睫毛加密 发布:2024-12-22 21:50:12 浏览:975
linuxbin文件的安装 发布:2024-12-22 21:46:07 浏览:798
vlcforandroid下载 发布:2024-12-22 21:45:26 浏览:664
电脑做网关把数据发送至服务器 发布:2024-12-22 21:44:50 浏览:431
新华三代理什么牌子的服务器 发布:2024-12-22 21:33:21 浏览:342
欢太会员密码是什么 发布:2024-12-22 20:57:28 浏览:74
sqllocaldb 发布:2024-12-22 20:07:08 浏览:126
如何找到我的服务器 发布:2024-12-22 19:52:14 浏览:301