二分法查找c语言程序代码(二分法查找的c语言编程题目)
C语言如何用二分法查找一个数.我要一个例题
//二分法查找一个数,原数列必须是有序的,
//有个问题,当数列中有相同的数怎么处理,也就是只找到其中一个
void binsrch( int m[N],int k){
int low,high,mid;
low=0;high=N-1;
while (low=high){
mid=(low+high)/2;
if (km[mid])
high=mid-1;
if (km[mid])
low=mid+1;
if (k==m[mid]){
printf("找到此数在数组的%d位,值为%d",mid+1,k);
return;
}
}
printf("没有找到此数,非常报歉");
return;
}
c语言编程二分查找
好久不写了
写一个程序,建立N元整型数组,然后输入查找的整数x,查找x是否包含在数组中,查找用函数实现,若查找成功,返回x在数组中的第一次出现的下标,查找失败,返回-1
源程序:
#include"stdio.h"
#define N 10
int locate(int a[N],int x)
{int h,r,m;
h=0;r=N-1;m=(h+r)/2;
while(h=rx!=a[m])
if(xa[m]) {r=m-1;m=(h+r)/2;}
else {h=m+1;m=(h+r)/2;}
if(hr) return -1; /*查找失败,返回-1*/
return m; /*查找成功,返回有效下标m */
}
void upinsert(int a[],int i) /*插入排序 (升序)*/
{int x,j;
x=a[i];j=i-1;
while(j=0a[j]x) {a[j+1]=a[j];j--;}
a[j+1]=x;
}
void main()
{int a[N],x,k,n;
printf("input %d integers:\n",N);
for(k=0;kN;k++) {scanf("%d",a+k);upinsert(a,k);}
printf("input x=") ;scanf("%d",x);
n=locate(a,x);
for(k=0;kN;k++) printf("%4d",a[k]);
printf("\n fist position=%d\n",n);
}
没有错误,我试过了
求二分法查找演示C语言源代码
二分法查找算法:
1.?主要思想是:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段 中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。
2. 时间复杂度: ?O(log2n)。
3. C语言源代码(小例子)
search函数即为核心代码:递归查找
#includestdio.h
int?search(int?*a,?int?num,?int?low,?int?high)
{
int?mid?=(low?+?high)/2;
if(low=high)
{
if(num??a[mid])
return?search(a,?num,?low,?mid-1);?//加return
if(num??a[mid])
return?search(a,?num,?mid+1,?high);//加return
if(num==a[mid])?????????????????????
return?1;
}
else
return?0;
}
int?main(){
int?a[11]?=?{0,?1,?2,?3,?4,?5,?9,?11,?12,?13,?15};
if(search(a,?11,?0,?10)==1)
printf("success!!");
else?
printf("failed!!");
}
C语言中二分法的具体程序是什么呢?
举个例子:
//二分查找法//
#
include
void
main()
{
int
a[16],i,num,flag=0,top,bottom,mid;
//定义一个一维数组a[16]用来存放供查找用的数据,但只用a[1]——a[15]//
//num用来放要查找的数据,flag是表示是否找到的开关变量,top表示查找的起始位置,bottom表示查找的终止位置,mid表示top与bottom的中间位置//
char
goon;
//变量goon为'y'或'Y'时表示继续下一轮查找,否则终止程序//
printf("请输入第1个数字:\n");
scanf("
%d",a[1]);
//依次输入第二到第十五个数,并要求输入的数递减//
for(i=2;i=15;i++)
{
printf("请输入第%d个数字:\n",i);
scanf("
%d",a[i]);
if(a[i]=a[i-1])
{
printf("请再次输入,它应该比上一个数小:\n");
scanf("
%d",a[i]);
}
}
//输出刚才输入的数//
printf("你刚才输入的数是:\n");
for(i=1;i=15;i++)
printf("
%d",a[i]);
printf("\n");
//查找循环开始//
do
{
printf("现在请输入你要查找的数:\n");//输入想要查找的数//
scanf("
%d",num);
top=15;
bottom=1;
mid=15/2+1;
if(numa[1]
||
num
0)//如果在规定的范围内,开始二分法查找//
{
if(num==a[mid])//找到所需数据,退出本层循环//
{
printf("你所要查找的数字是第%d个。\n",mid);
flag=1;
}
else
if(numa[mid])//如果要查找的数据比a[mid]大,在前半数组查找//
{
top=mid+1;
mid=(top+bottom)/2;
}
else
//如果要查找的数据比a[mid]小,在后半数组查找//
{
bottom=mid-1;
mid=(top+bottom)/2;
}
}
if(flag==0)//如果未找到数据,输出找不到的信息//
printf("无法找到你要找的数字!\n");
printf("是否继续查找?(Y/N):\n");//询问是否开始下一轮查找//
scanf("
%c",goon);
}while(goon=='y'
||
goon=='Y');
}
C语言二分法查找
#include stdio.h//不用math头文件
void main()
{int high = 9,low = 0,m,k,a[10]={1,2,3,4,5,6,7,8,9,10};//hing和low赋初值
scanf("%d",k);
while (high=low)//=
{
m=(high+low)/2;
if(ka[m]) high=m-1;//比较的是数值而不是下标
else if(ka[m]) low=m+1;
else
{
printf("yes");
return;//这两句地方放错了
}
}
printf("no");
return;//if语句去掉
}
(二分法)C语言程序
1、打开Python开发工具IDLE,新建‘search.py’。
2、F5运行程序,list1被正确排序,写这个的目的是说明二分法查找必须前提是一个有序的列表,如果一开始无序首先要排序,当数据量大的时候,快速排序是一个很好的选择,再进行二分法查找。
3、用递归的思想,递归就一定有结束条件。
4、if len(li)==1: ? #li长度等于1,只比较这个列表元素与要查找到值return li[0]==item。
5、if len(li)==0: #li长度等于0,全部查找结束还是没有这个值? return False。
6、为程序添加main方法。
7、F5运行程序,正确打印出二分法查找结果,False True。