【题目内容】
使用自定义函数,利用折半查找实现在一个有序数组中查找特定元素的下标数。
【输入形式】
一个有序数组和待查找元素值
【输出形式】
待查找元素的下标数
【测试用例1】
输入:
1 2 3 4 5 5
输出:
4
【测试用例2】
输入:
2 5 6 7 8 5
输出:
1
1 2 3 4 5 5 ?
意思是最后一个输入的是特定元素?
另外也没有明确有序是递增还是递减,所以需要进行判断
#include <stdio.h>
int main()
{
int a[1000],n=0,m;
int left,right,mid,up = 0;
do
{
scanf("%d",&a[n]);
n++;
}while(getchar() != '\n');
if(n<3)
{
printf("输入数据不足");
return 0;
}
if(a[0] < a[1])
up = 1;
m = a[n-1];
n--;
left = 0;
right = n-1;
while(left <= right)
{
mid = (left+right)/2;
if(a[mid] == m)
break;
else if(a[mid] < m)
{
if(up == 1)
left = mid+1;
else
right = mid-1;
}
else
{
if(up == 1)
right = mid-1;
else
left = mid+1;
}
}
if(left > right)
printf("查无次数");
else
printf("%d",mid);
return 0;
}