题目描述
编写函数输入、排序、二分查找。输入数据时读到-9999停止,排序时不考虑-9999,第二行输入5个数,分别搜索,如果存在则输出排序后的下标,如果不存在则输出-1
这道题思路很简单,主要用于函数练存档…
#include<bits/stdc++.h>
using namespace std;
int input(int a[]){
int i;
for(i=0;;i++){
cin>>a[i];
if(a[i]==-9999){
break;
}
}
return i+1;
}
void order(int a[],int L){
int i,j,t;
for (i=0;i<L-1;i++){
for (j=0;j<L-1-i;j++){
if (a[j]>a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
int find(int a[],int k,int L){
int det=-1;
int left=0,right=L-1,mid;
while(left<=right){
mid=(left+right)/2;
if(a[mid]<k){
left=mid+1;
}else if(a[mid]>k){
right=mid-1;
}else{
det=mid;
//cout<<"det="<<det<<endl;
break;
}
}
return det;
}
int main(){
int a[101],b[101];
int len=input(a);
//cout<<"len="<<len<<endl;
int lenb=len-1;
for(int i=0;i<lenb;i++){
b[i]=a[i];
}
// for(int i=0;i<lenb;i++){
// cout<<b[i]<<" ";
// }
// cout<<endl;
order(b,lenb);
// for(int i=0;i<lenb;i++){
// cout<<b[i]<<" ";
// }
// cout<<endl;
int c[10],j;
for(j=0;j<5;j++){
cin>>c[j];
}
for(j=0;j<5;j++){
int ans=find(b,c[j],lenb);
cout<<ans<<endl;
}
return 0;
}
测试结果:
2 1 3 4 5 -9999
2 3 4 -10 10
1
2
3
-1
-1