gpt4 book ai didi

c - c中的二进制搜索

转载 作者:行者123 更新时间:2023-12-02 04:39:56 25 4
gpt4 key购买 nike

我写了一个带有函数的代码并使用了 strcmp。我在程序中输入了 5 个名字(其中一个是 sara)。当我搜索它们时,我可以找到所有的名字,但找不到 sara .为什么我搜索 sara 找不到它?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void fbubble(char [][21],int);
int fsearch(char [][21],char [],int);
int main(int argc, char *argv[]) {
const int n=5;
int i;
char name[21],a[n][21];
printf("enter 5 name\n");
for(i=0;i<n;i++)
gets(a[i]);
fbubble(a,n);
printf("enter name to search\n");
gets(name);
if(fsearch(a,name,n)==-1)
printf("name not exist in the table\n");
else printf("name exist in the table\n");
getch();
return 0;
}
//**********************************************
void fbubble(char a[5][21],int n){
int i,j;
char temp[21];
for(i=n-1;i>0;i--)
for(j=0;j<i;j++)
if(strcmp(a[j],a[j+1])>0){
strcpy(temp,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],temp);
}
}
//**********************************************
int fsearch(char a[5][21],char name[21],int n){
int mid,low=0,high=n-1;
while(low<high){
mid=(low+high)/2;
if(strcmp(name,a[mid])<0)
high=mid-1;
else if(strcmp(name,a[mid])>0)
low=mid+1;
else return mid;
}
return -1;
}

最佳答案

关于你的高低对比

让我们从逻辑上考虑一下

我们有

['ahmad','ali','masoud','reza','sara']
0 1 2 3 4

high = 4 , low = 0 , mid = 2

masoud != sara

low = mid+1 = 3

mid = 7/2 = 3

reza != sara

low = mid+1 = 4

high>low == false;break;

修复:

你想要while(low<=high)

关于c - c中的二进制搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21047627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com