有5个数按小到大的顺序存放在一个数组中,输入一个数,要求按折半查找法找出该数组中的第几个元素的值。如果该数不在数组中,则打印出“无此表”。
#include<stdio.h> #define N 5
void main() { int i,number,top,bott,mid,loca=0,a[ N],flag=0,sign=1; char c; // 输入五个数 printf("Enter data:\n"); scanf("%d",&a[0]); //判断是否从小到大 i=1; while(i<N) { scanf("%d",&a[ i]); if(a[ i]>a[i-1]) i++; else printf("Enter the number angain:"); } printf("\n"); //输出五个数 for(i=0;i<N;i++) printf("%4d",a); printf("\n");
flag=1; //开始折半查找 while(flag) { sign=1; printf("Input the number to look for:"); scanf("%d",&number); top=0; bott=N-1; if((number<a[0])||(number>a[N-1])) flag=-1; while((sign==1)&&(top<=bott)) { mid=(bott+top)/2; if(number==a[mid]) { printf("Find %d ,its position is %d\n",number,mid+1); sign=0; } else if(number<a[mid]) bott=mid-1; else bott=mid+1; } if(sign==1) printf("%d is not found .\n",number); printf("Continue or not(Y/N)?"); fflush(stdin); scanf("%c",&c); if(c=='N'||c=='n') flag=0; } } 不知怎么的,程序运行时除了第三个数能得出正确的结果外,其他的几个都不能得到结果,请各位大虾指点一下,哪里出问题了??谢谢!!