二分查找算法也许是数据结构与算法的一大重要部分,但是在C语言中,我们在解决数组问题时,也要学会灵活应用二分查找法,这样会使我们的代码量大大降低,那么让我详细讲解一下二分查找吧!!!
用代码说话吧!!
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;//如果要找到数组里面的7
int sz = sizeof(arr) / sizeof(arr[0]);//算出数组元素的个数
int left = 0;//第一个元素的下坐标
int right = sz - 1;//最后一个元素的下坐标
while (left <= right)//当left<=right,表示他们之间还有元素可以查找,
//而=就是如果数组中有想要找的数,
//可能就是在left=right时取得的坐标,如果忘了加上等于号,那就有可能找不到了。
{
int mid = (left + right) / 2;
if (arr[mid] > k)
{
right = mid - 1;
}
else if (arr[mid] < k)
{
left = mid + 1;
}
else
{
printf("找到了,下坐标是:%d\n",mid);
}
}
if (left > right)
{
printf("找不到\n");
}
return 0;
}
由此,我以画图的形式让大家更加理解
其实二分查找的思想在这也是完美的体现, 不断的缩小范围,来更加高效的找到元素,其实大家可能最不懂的是为什么left=right也在while循环中,其实就是为了防止我们要找的元素的下坐标刚好是在left=right时,这样才可以打印出下坐标!!
讲到现在,我相信大家肯定会对二分查找有个更好的理解,如果以上的内容还有不懂的,随时可以私信我,我这加我的QQ:2744827565,本人一定会及时做出回应!!!