摘要:,,本文介绍了轻松掌握C语言中的二分查找算法。二分查找是一种高效的搜索算法,适用于已排序的数组或列表。本文将详细介绍二分查找的基本思想、实现步骤和代码示例,帮助读者快速掌握这一重要技能,以便在实际编程中灵活应用。
欢迎关注 轻松拿捏C语言系列,和小哇一起进步吧!
感谢大家的阅读、点赞、收藏和关注❤️
目录🎉
一、介绍🌈
二分查找是一种在有序数组中查找某一特定元素的搜索算法。
举个生活中的例子,当我们去图书馆借书时,知道了要找的图书编号,我们可以按照一种有序的方式查找,从中间开始,然后决定是往前找还是往后找,这样就能比一本一本地找更加快速。
搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或小于中间元素,则在数组大于或小于中间元素的那一半中查找。
如果在某一步骤数组为空,则代表找不到,这种搜索算法每一次比较都使搜索范围缩小一半。
二、步骤🌙
- 确定搜索范围,即数组的下标范围。
- 计算中间元素的下标时,为了避免整数溢出,我们可以采用一种更稳妥的方式:mid = left + (right - left) / 2。
我们还需要考虑一种情况:当数组元素数量非常大时,直接计算中间元素的下标可能会导致整数溢出,为了避免这种情况,我们可以采用另一种计算方法:mid = left + (right + left) / 2,这样可以确保结果始终在正确的范围内。
- 判断中间元素与目标值的大小关系,然后进行递归或循环查找。
三、代码☀️
法一:用递归实现
#include <stdio.h>int binarySearchRecursive(int arr[], int left, int right, int key) {
if (left > right) {
return -1; // 搜索范围无效
}
int mid = left + (right - left) / 2; // 避免溢出的写法
if (arr[mid] == key) {
return mid; // 找到目标,返回下标
} else if (arr[mid] > key) {
return binarySearchRecursive(arr, left, mid - 1, key); // 在左半部分继续搜索
} else {
return binarySearchRecursive(arr, mid + 1, right, key); // 在右半部分继续搜索
}
int main() {
int arr[] = {1, 3, 5, 7, 9};
int key = 5;
int n = sizeof(arr) / sizeof(arr[0]);
int ret = binarySearchRecursive(arr, 0, n - 1, key);
if (ret != -1) {
printf("元素 %d 在数组中的下标为 %d\n", key, ret);
} else {
printf("元素 %d 不在数组中\n", key);
}
return 0;
}
法二:用循环实现
#include <stdio.h>int binarySearchIterative(int arr[], int N, int key) {
int left = 0;
int right = N - 1;
while (left<= right) { // 注意这里使用小于等于号,确保能够遍历整个数组范围直到找到目标值或确定不存在为止,其他部分与递归实现类似。} return -1; // 未找到目标值}
还没有评论,来说两句吧...