如果我们在一堆数组中需要查找某一个元素,一般情况下我们需要在所有元素中一个一个对比,当我们将数组排序好之后,就不需要这么直接笨拙的办法了,由此我们可以用二分查找法(也叫折半查找)进行查找我们需要的元素
二分查找法的使用前提是:数组已经排序好了。
假设我们这里使用的是升序排序,那么二分查找法的基本原理就是:
- 将数组中第一个元素设置为low,最后一个元素设置为high,中间元素设置为mid;
- 设置我们要查找的数组为关键字key;
- 将关键字key与中间元素mid进行比较,如果key<mid:
如果key=mid,则匹配成功,查找结束;
如果key<mid,则在mid元素之前的一半元素中查找:将high重新设置为mid前一个元素,mid设置为high和low中间的一个元素,再次比较;
如果key<mid,则在mid元素之前的一半元素中查找:将low重新设置为mid后一个元素,mid设置为high和low中间的一个元素,再次比较。
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
srand((unsigned int)time(0));
int x = rand() % 10;
printf("x:%d\n",x);
int left = 0;
int right = 9;
while (left <= right)
{
int mid = (left + right) / 2;
if (x < mid)
{
right = mid - 1;
}
else if (x > mid)
{
left = mid + 1;
}
else
{
printf("查找成功:%d\n",mid);
return mid;
}
}
printf("查找失败\n");
return 0;
}