本文目录一览:
- 1、怎样写二分查找算法的程序(用C语言实现)
- 2、谁能用c语言帮我写个二分法的查找程序??
- 3、用C语言写二分查找的代码!!!
- 4、c语言如何实现二分查找,问题描述看图,我的源代码如下:
- 5、C语言二分查找
- 6、c语言实验报告的二分法查找,跪求各位高手帮助
怎样写二分查找算法的程序(用C语言实现)
我用一个子函数实现的,主函数你自己写,对你又好处,需要传入一个数组和数组长度n以及要查找的数,如果查找成功,返回x在数组中的位置,否则返回-1
int search(int *a,int x)
{ int low=0,high=n-1,mid,flag=-1;
while(low=high)
{ mid=(low+high)/2;
if(a[mid]==x) return mid;
else if(a[mid]low) low=mid+1;
else high=mid-1;
}
return flag;
}
谁能用c语言帮我写个二分法的查找程序??
#includestdlib.h
void
sort(int
a[],int
n){
/*排序函数,要使用二分法查找就必须对数组进行排序*/
int
i,k;
for(i=0;in;i++){
int
min=i;
for(k=i+1;kn;k++)
if(a[min]a[k])min=k;
if(i!=min){
a[min]+=a[i];/*这里是运用加减法交换两个数*/
a[i]=a[min]-a[i];
a[min]-=a[i];
}
}
}
int
find(int
a[],int
n,int
key){/*二分法查找;参数:数组名,数组长度,查找关键字*/
int
min=0,max=n-1;/*二分法查找头尾变量*/
while(minmax){/*如果最头的变量值大于最尾变量的值,则查找不到,查找失败*/
int
cen
=
(min+max)/2;
if(a[cen]==key)
return
cen;/*如果查到,则返回关键字在排序数组的下标*/
if(cen==min
||
cen==max)break;/*如果中间变量等于头尾任一个变量,同样查找失败*/
if(a[cen]key)
max=cen;
else
min=cen;
}
return
-1;
}
void
main(){/*主程序只是为了证明两个函数的可行性,可以自己编写*/
int
a[]={14,10,25,36,87,95,10,12,13,8},i;
sort(a,10);
i=find(a,10,11);
if(i!=-1)
printf("be
found");
else
printf("no
found");
getch();
}
用C语言写二分查找的代码!!!
推荐答案的 code 有问题,并没有考虑到若待查数的下标是 0 怎么办?所以若顺序表中不存在待查元素 应该 return -1
加上主函数的最后两行调用两次查找函数很多余,代码显得不够简练。
建议改成:
#include stdio.h
#include stdlib.h
int Search(int *a, int key)
{
// 在顺序表中折半查找 key的数据元素。若找到,则函数值为
int low = 0, mid; // 该元素的数组下标;否则为0。
int high = 14;
while (low = high)
{
mid = (low + high) / 2;
if (key == a[mid])
return mid; // 找到待查元素
else if (key a[mid])
high = mid - 1; // 继续在前半区间进行查找
else
low = mid + 1; // 继续在后半区间进行查找
}
return -1; // 顺序表中不存在待查元素
}
void main()
{
int *a, key, i;
int b[15] = {0};
a = b;
printf("请自小到大输入15个整数:\n");
for (i = 1; i = 15; i++)
{
scanf("%d", b[i - 1]);
printf("\n");
}
printf("请输入你要查找的数:\n");
scanf("%d", key);
i = Search(a, key);
if (-1 == i)
printf("你要查找的数不在目标数组中!\n");
else
printf("你要查找的数的数组下标为 %d \n", i);
}
c语言如何实现二分查找,问题描述看图,我的源代码如下:
#include stdio.h
int numbers[1000001]; //全局变量,数组numbers太大,必须放在这里定义
int Bsearch(int numbers[], int left, int right, int k);
int main()
{
int i, j, k, m, n;
//数组numbers太大,不能放在main函数里,而要放在函数外定义,
//不然的话,会导致函数堆栈溢出.
//原代码int numbers[1000001];
// 反复读入数字和查找数字的数量
while (scanf("%d %d", n, k) != EOF)
{
// 读入给定的数字
for (i = 0; i n; i++)
{
scanf("%d", numbers[i]);
}
for (j = 0; j k; j++)
{
// 读入待查找的数字,
scanf("%d", m);
// 请在下面完成查找读入数字的功能
int ret;
ret = Bsearch(numbers, 0, n - 1, m);
printf("%d", ret);
if (j != k - 1)
{
printf(" ");
}
}
printf("\n");
}
return 0;
}
int Bsearch(int numbers[], int left, int right, int m)
{
int mid;
while (left = right) //原代码while (left right)
{
mid = (left + right) / 2;
if (numbers[mid] == m)
{
return mid + 1;
}
else if (numbers[mid] m)
{
right = mid -1;
}
else
{
left = mid + 1;
}
}
return 0;
}
C语言二分查找
if(key==a[mid]) return mid; 这句就是罪魁祸首。呵呵你是想用return来结束while循环吧。用错了。
找到结果后,你应该是把结果输出出来,而不是用return。return语句是返回整个函数的,在你的程序里main函数就结束了,你当然看不到任何结果了。
改为:
if(key==a[mid]) break; *这行是结束while循环的。而不是你所用的return*/
}
c语言实验报告的二分法查找,跪求各位高手帮助
#include"stdio.h"
#define N 10
int find(int a[],int x)
{
int p,h,t;
p=-1;
h=0,t=N-1;
while(h=t)
if(a[(h+t)/2]x) h=(h+t)/2;
else if(a[(h+t)/2]x) t=(h+t)/2;
else {p=(h+t)/2;break;}
return p;
}
main()
{
int p,m,a[N]={1,3,4,8,9,11,13,17,18,20};
scanf("%d",m);
p=find(a,m);
if(p==-1) printf("\nno!");
else printf("\nYES! %d",p);
}