二分查找:针对排好序的序列,查找其中的某个数字,一段粗略的代码如下来了解一下基本思路:
#include<stdio.h>
void search(int a[], int n, int x)
{
int i;
if(a[n/2] == x)
{
printf("需要查找的数已经查到,放心!\n");
printf("您要查找的数a[%d]=%d", n/2, a[n/2]);
}
if(a[n/2] < x)
{
for(i = n/2; i < n;i++)
{
if(a[i] == x)
{
printf("需要查找的数已经查到,放心!\n");
printf("您要查找的数a[%d]=%d", i, a[i]);
break;
}
}
if(i == n)//没找到的话肯定是遍历了整个循环体,然后退出
printf("很遗憾,您想查找的数不存在!\n");
}
if(a[n/2] > x)
{
for(i = n/2; i >= 0;i--)
{
if(a[i] == x)
{
printf("需要查找的数已经查到,放心!\n");
printf("您要查找的数a[%d]=%d",i,a[i]);
break;
}
}
if(i == -1)
printf("很遗憾,您想查找的数不存在!\n");
}
}
int main()
{
int i;
int a[15]={1,2,3,4,5,19,20,21,22,24,40,41,43,50,51};
printf("请输入您想查找的数:\n");
scanf("%d", &i);
search(a, 15, i);
return 0;
}
相应的二分查找代码: int binary_search(int a[], int key) { int mid; int first = 0; int end = n - 1; while( first <= end) { mid = (first + end) / 2; if(key < mid) end = mid - 1; else if (key > mid) first = mid + 1; else return a[mid]; } return -1; }