您的位置:

c语言二分查找实验程序截图下载,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);

}