比较鸡肋,不实用。使用二分法前提最好是有现成的有序数组。
#include <stdio.h>
void sort(int *s,int len) //冒泡排序
{
int i,j;
int t;
for ( i=0; i<len-1; i++ )
for ( j=0; j<len-1-i; j++ )
if ( s[j]>s[j+1] )
{
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
}
int two_search(int *s,int len,int aim) //二分法查找
{
int ret=-1;
int left=0,right=len-1;
while (left<=right)
{
int mid=left+(right-left)/2;
if (s[mid]==aim)
{
ret=mid;
break;
}
else if ( s[mid]<aim )
left=mid+1; //left=mid+1,right=mid-1 防止出现死循环
else if ( s[mid]>aim )
right=mid-1;
}
return ret;
}
int main()
{
int array[101],target,id;
int len;
scanf("%d",&len); //define数组length
int i;
for ( i=0; i<len; i++ ) //输入乱序数组元素
scanf("%d",array+i);
sort(array,len); //数组从小到大排序
for ( i=0; i<len; i++ ) //输出排序后的数组
{
printf("%d",array[i]);
if ( i==len-1 )
printf("\n");
else
printf(" ");
}
while (scanf("%d",&target)!=EOF) //查找排序后数组的元素位置(若无此元素,则为-1)
{
id = two_search(array,len,target);
printf("%d\n",id);
}
}