问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于C语言的折半查找的代码,先排序后折半查找。

发布网友 发布时间:2022-05-01 15:39

我来回答

4个回答

热心网友 时间:2022-06-18 22:24

#include <stdio.h>
#define N 10
int main()
{
int a[N],num,index,flag=0;
int i,j,t;
int low=0,high=N-2,mid;
printf("请输入%d个数:\n",N);
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("\n");
for (j=0;j<9;j++)
for (i=0;i<9-j;i++)
if (a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf("这些数由大到小的顺序是:");
for (i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n\n");
printf("请输入要查找的数:\n");
scanf("%d",&num);
if(num==a[N-1])
printf("你要找的数是第%d项。",N);
else
while (low<high)
{
if(num==a[high])
{
flag=1;
index=high+1;
break;}
if(num==a[low])
{
flag=1;
index=low+1;
break;}
mid=(low+high)/2;
if (num==a[mid]+1)
{
flag=1;
index=mid+2;
break;
}
else
{
if (num>mid)
low=mid;
else
high=mid;
}
}
if (flag==1)
printf("你要找的数是第%d项。",index);
else
printf("你要找的数不在该数组中。");
return 0;
}

给别人看程序比自己写慢多了。。。。。。
首先有没包含进去的情况。。你的程序加起来是奇数,会舍去一,结果很乱
还有就是没有加break;程序当然不会停了。。。

热心网友 时间:2022-06-18 22:25

改了一下,简写的折半找只能找到一个(假如存在多个相等的情况)。上半部分像9这种数字应该用N的表达式来表示。

printf("\n\n");
printf("请输入要查找的数:\n");
scanf("%d", &num);

while (low <= high)
{
mid = (low + high) / 2;
if (num == a[mid])
{
flag = 1;
index = mid + 1;
break;
}
else if (num > a[mid]) // 原来的if (num>mid) 的比较毫无意义
low = mid + 1;
else
high = mid - 1;
}

if (flag == 1)
printf("你要找的数是第 %d 项。", index);
else
printf("你要找的数不在该数组中。");

热心网友 时间:2022-06-18 22:25

while (low<high)
{ mid=(low+high)/2;
if (num==a[mid])
{flag=1; index=mid+1;}
else
{if (num>mid) low=mid+1;
elsehigh=mid-1;
}
}
循环的执行条件改为:while (low<high && flag==0)
否则,在flag为1时就形成死循环啦。

热心网友 时间:2022-06-18 22:26

while
(low<high)
{
mid=(low+high)/2;
if
(num==a[mid])
{
flag=1;
index=mid+1;
}
else
{
if
(num>mid)
low=mid+1;
else
high=mid-1;
}
}
循环的执行条件改为:while
(low<high
&&
flag==0)
否则,在flag为1时就形成死循环啦。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ef英语哪个好 EF英孚英语培训怎么样? 英孚英语好不好 EF英孚教育到底好不好 大佬们,麦芒7和荣耀10那个值得入手?2500以下的机子还有啥好推荐的么... 介绍几款2500元以前的手机 像素一定要高 其他的不做要求 近期想入手一部安卓手机,价格2200到2500左右…买HTC desire Z还是 三星... 笔记本忘记开机密码怎么办急死了 笔记本电脑屏幕开机锁忘记密码 怎么办?急死了 华硕笔记本电脑开机密码忘记了怎样找回?系统是Windows 7旗舰版... 求一些IQ题或者谜语(有趣点) C语言 重复元素折半查找 样子像小船骨头露外边头尾两头翘嫩肉藏里面是什么动物 site:www.5068.com 求C语言编写程序折半查找程序 样孑像小船,骨头两边露,头尾两头饶,嫩肉藏里面, 普通话标准可以从事什么工作? C语言 指针和函数编程实现折半查找算法 谜底为肉类食物的和青菜类的谜语 C语言程序编写——折半查找法 样子象小船,骨头露外边,头尾两头翘,嫩肉藏里边是什么生肖 关于科普类的谜语 折半查找的算法怎么写 C语言 C语言实现折半查找 样子像小船,骨头露外面,头尾两头翘,嫩肉藏里面。(猜一动物?)谢谢! 用c语言实现折半查找 样子像小般,骨头露外边,头尾两头翅,嫩肉藏里面。打一动物 样子象小船,骨气露外边,頭尾雨頭翅,嫩肉藏里面,打一動物 c语言编程实现“折半查找”的过程。 用c语言编程若有一数组y[10]已按升序排列,用折半查找法查找与给定值相等的元素_百度问一问 一些简单的字谜 小米5nfc模拟门卡进不去 C语言用折半查找查找 小米手环5nfc加密卡怎么复制 小米5 NFC模拟门禁卡提示模拟失败,手机未注册求助,是什么原因? 普通话水平为一级乙等可以从事什么工作 小米5手环为什么不能代刷门禁卡? 网易云照片墙如何取消背景 普通话水平测试员的工作要求有哪些? 国家对公务员的普通话水平有何具体要求 1664rouges是什么酒 rouges是什么口味 梦见地震,一棵开花的沙枣树彼震倒了预示着什么? 梦见-路两边的树开着黄色的小花,其中也有沙枣花,很好看 梦到死人给你红沙枣 赞美枣树的话 梦见大沙枣树在捡地上打落下的沙枣 梦见沙枣树栽在花盆里想拨出来 梦见自己尿尿旁边的沙枣树枣红了 皇猫电子驱鼠器怎么样?皇猫电子驱鼠器有用吗 ? 皇猫驱鼠器有用吗,这个东西为什么能把老鼠赶走了呢