首先对查找的列表有两个要求:(1)、必须采用顺序存储结构(2)、必须按关键大小有序排列
算法思想:首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等则查找成功,否则利用中间位置记录将表分成前后两个字表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
重复上述过程,知道找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
测试程序如下所示:
- #include<stdio.h>
- int Find(int a[],int x,int length)
- {
- int low,high;
- int mid;
- low=1,high=length;
- while(low<=high)
- {
- mid=(low high)/2;
- if(x==a[mid])
- return mid;
- else if(x>a[mid])
- low=mid 1;
- else
- high=mid-1;
- }
- return 0;
-
- }
- int main()
- {
- int length;
- int i,x;
- int flag;
- int a[100];
- printf("请输入元素的个数: ");
- scanf("%d",&length);
- printf("请输入元素(输入的元素必须是有序序列,此例中是降序序列): \n");
- for(i=1;i<=length;i )
- scanf("%d",&a[i]);
- printf("请输入要查找的元素: ");
- scanf("%d",&x);
- flag=Find(a,x,length);
- if(flag)
- printf("要查找的数据是数组中第%d个元素\n",flag);
- else
- printf("没有找到要找的数\n");
- }
阅读(3302) | 评论(0) | 转发(4) |