在一个升序数组中查找某个数字k,找到了输出它的下标,供参考:
#include <stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10}, k;
printf("Please enter a number:");
scanf("%d",&k);
int Size = sizeof(arr)/sizeof(arr[0]);
int left = 0;
int right = Size - 1;
while(left<=right)
{
int mid = (left + right) / 2;
if(k < arr[mid])
right = mid - 1;
else if(k > arr[mid])
left = mid + 1;
else{
printf("找到了,下标是%d\n",mid);
break;
}
}
if(left > right)
printf("未找到\n");
return 0;
}
#include <stdio.h>
int halfSearch(int a[],int target){
int start = 0,end = 9; //数组的开头和末尾
while(start<=end) //循环的条件是开头下标小于等于末尾的小标,理解并牢记
{
int mid = (start+end)/2; //中间的索引
if(a[mid] == target)
return mid;
else if(a[mid] > target)
{
end = mid - 1;
}
else{
start = mid + 1;
}
}
}
int main(){
int a[10] = {0,1,2,3,4,5,6,7,8,9},target;
scanf("%d",&target);
printf("%d",halfSearch(a,target));
}