#include<stdio.h>
void sort(int b[],int n)
{
int i,j,k,temp;
for(i=0;i<=n-2;i++)
{
k=i;
temp=b[i];
for(j=i+1;j<=n-1;j++)
{
if(temp>b[j])
{
temp=b[j];
k=j;
}
}
temp=b[i];
b[i]=b[k];
b[k]=temp;
}
}
int main()
{
int a[100], n,i;
printf("请输入数组的长度:\n");
scanf("%d",&n);
printf("请输入你的数组:\n");
for(i=0;i<=n-1;i++)
scanf("%d",&a[i]);
sort(a,n);
int left,right,mid,k;
printf("请输入你想查找的数:\n");
scanf("%d",&k);
left=0,right=n-1;
mid=(left+right)/2;
while(left<=right)
{
if(k<a[left]||k>a[right])
{
printf("wrong\n");
break;
}
if(k==a[left])
{
printf("%d is 第%d个",k,left+1);
break;
}
if(k==a[right])
{
printf("%d is 第%d个",k,right+1);
break;
}
if(k==a[mid])
{
printf("%d is 第%d个",k,mid+1);
break;
}
if(k<a[mid])
{
right=mid-1;
mid=(left+right)/2;
}
if(k>a[mid])
{
left=mid+1;
mid=(left+right)/2;
}
}
return 0;
}
对于折中查找某一数字,首先应该将数组进行排序,要么升序或者降序排序,排完序之后,就可以进行查找,所谓折中查找,即每次都缩小一半的查找范围,但是应该注意的是每次应该判断所要查找的数是否在所在的数组内,即每次查找前应该进行判断,然后再判断所要查找的数是否在每一阶段的开头或结尾,即a[left]或者a[right],a[mid],注意循环结束应该是left<=right,此时两端相遇,这是一种重要的思想。