关于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时就形成死循环啦。