(1)创建一个非递减序列并使用折半查找的方法查找元素。已知序列中的元素如下:10、23、45、46、51、62、63、74、85、91、100、102.要求:查找算法执行两次,一次查找元素45,查找成功,返回45对应的下标值3;另一次查找失败,在主函数中输出提示信息。可能用到的算法:1.折半查找算法。2.主函数。
代码如下,二分法封装成函数:
#include <stdio.h>
//数组以升序排列时,二分法查找x
int binSearch(int x, int a[], int n)
{
int low, high, mid;
low = 0;
high = n-1;
while(low <= high)
{
mid = (low + high) / 2;
if(x < a[mid])
high = mid - 1;
else if(x > a[mid])
low = mid + 1;
else
return mid;
}
return -1;
}
int main()
{
int a[12] ={10,23,45,46,51,62,63,74,85,91,100,102};
int pos;
int i=0,n;
//查找两次
for(i=0;i<2;i++)
{
printf("请输入你要查找的数:");
scanf("%d",&n);
pos = binSearch(n,a,12);//查找45
if(pos >= 0)
printf("%d所在的位置:%d\n",n,pos+1);
else
printf("没找到%d\n",n);
}
return 0;
}
#include "stdio.h"
void main()
{
int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int left,right,mid;
int num,cnt=0;
printf("请输入你要查找的数据:");
scanf("%d",&num);
left = 0;
right= 14;
while(left<=right){
//计算查找次数
cnt++;
//获取中间位置元素的下标
mid = (left+right)/2;
if(num<a[mid]){
//往右找
left=mid+1;
}else if(num>a[mid]){
//往左找
right=mid-1;
}else{
//找到了
printf("在第%d个位置找到了数据,共查找%d次\n",mid+1,cnt);
break;
}
};
if(left>right){
printf("你要查找的数据不存在\n");
}
}