题目内容:
分别编写函数输入数组元素(输入-9999表示结束)、从小到大排序数组元素、用二分法在有序数组中查找(返回下标)。
编写主函数,调用函数进行输入、排序和查找。数组元素不超过100个,均为整数。
输入格式:
两行,第1行为输入的数组元素,以-9999结束;第2行输入5个待查找的元素。数据用空格隔开。
输出格式:
5行,每行是查找到的元素的下标,找不到时结果为-1。
输入样例:
2 1 3 4 5 -9999
2 3 4 -10 10
输出样例:
1
2
3
-1
-1
思路分析:按照输入、排序、查找的顺序一步一步来,可以写一些输出检查前面的步骤是否正确:
#include<iostream>
#include<cmath>
#include<string.h>
using namespace std;
static int l=0;
void sequence(int *a)
{int i ,j,n=0;
for(i=0;i<=l-1;i++)
{for(j=0;j<l-1-i;j++)
{
if(a[j]>a[j+1])
{ n=a[j];
a[j]=a[j+1];
a[j+1]=n;
}
}
}
}
int find(int *a,int b)
{ int left=0;
int right=l-1;
while(left<=right)
{
{int mid=(left+right)/2;
if(a[mid]==b) {return mid;}
else if(a[mid]<b)
{left=mid+1;}
else
{right=mid-1;}
}
}
return -1;
}
int main()
{
int a[110],b[110];
int i,n=5;
for(i=0;;i++)
{cin>>a[i];l++;
if(a[i]==-9999)
break;
}
l=l-1;
sequence(a);
for(i=0;i<n;i++)
{ cin>>b[i];
cout<<find(a,b[i])<<endl;}
}