#include<stdio.h>
int main()
{
int n = 0;
int a[10] = {0};
int i = 0;
int t = 0;
int num = 0;
int low=0;//初始状态 low 指针指向第一个数字
int high = 0;
int mid;
scanf("%d",&n);
high=n-1;//high 指向最后一个数字
for(int b = 0; b < n; b++)
{
scanf("%d",&a[b]);
}
scanf("%d",&num);
for(int b = 0; b < n; b++)
for(int c = 0; c < n - b - 1; c++)
{
if(a[c] > a[c + 1])
{
t = a[c];
a[c] = a[c+1];
a[c+1] = t;
}
}
for(int b = 0; b < n; b++)
printf("%d ",a[b]);
while (low<=high) {
mid=(low+high)/2;
if (a[mid]==num)//如果 mid 指向的同要查找的相等,返回 mid 所指向的位置
{
printf("\n%d",mid+1);
break;
}else if(a[mid]>num)//如果mid指向的数据大于num,则更新 high 指针的位置
{
high=mid-1;
}
//反之,则更新 low 指针的位置
else{
low=mid+1;
}
}
return 0;
}
先上结果,这个你不会我觉得你可能是这个折半查找不太会实现,这个我帮你写了一下,现在给你再说一下,就是我先用冒泡排序给数组排个序,然后输出,输出之后就折半查找,折半查找就是你把你输入的数据num去跟high和low的中间数去比较,如果中间值大于num那就说明在你数组的前半段,不然就在后半段,比方说在前半段,那你就把high移动到mid的上一个数据就是mid-1的位置,因为你的数据其实已经跟mid比较过了,所以移动到他上一个位置,然后在获取新的mid,就这样一直夹这个数,直到low>high就说明你这个折半折完了,结果如下