有序数组:a[]={1,2,3,4,5,6,7,8,9,10}
二分查找:首先在数组中找到中间位置的数组下标mid=(start+end)/2,将所要找的数x与mid进行比较:
- 若x>mid,则要找的数在后半部分,所以令start=mid+1
- 若x<mid,则要找的数在前半部分,所以令end=mid-1
- 重复以上步骤,直到找到x=mid
代码实现如下:
#include <stdio.h>
#include <Windows.h>
#pragma warning (disable:4996)
int binsearch(int _x, int a[], int num)
{
int start = 0;//start ,end 为数组下标
int end = num - 1;
while (start <= end)
{
int mid = (start + end) / 2;
if (_x > a [mid])
{
start = mid + 1;
}
else if (_x < a[mid])
{
end = mid - 1;
}
else
return mid;//返回值为数组下标
}
return -1;//找到所要找的数,即返回mid;否则返回值为-1.
}
int main()
{
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int num = sizeof(a) / sizeof(a[0]); //数组长度
int x = 0;
printf("请输入你要查找的数据:");
scanf("%d", &x);
printf("%d\n", binsearch(x, a, num));
system("pause");
return 0;
}