C语言二分查找流程图
时间: 2023-07-18 17:19:50 浏览: 111
以下是C语言二分查找的基本流程图:
```
1. 定义数组和要查找的值
2. 定义左右指针
3. while(left <= right)
4. 计算中间位置mid
5. if(arr[mid] == value)
6. 返回mid
7. else if(arr[mid] > value)
8. right = mid - 1
9. else
10. left = mid + 1
11. 返回-1,表示未找到
```
其中,`arr`为要查找的数组,`value`为要查找的值,`left`和`right`为左右指针,`mid`为中间位置。在每一次循环中,都会计算出中间位置并与要查找的值进行比较,如果相等则返回该位置,否则根据大小关系调整左右指针的值,直到找到或者未找到为止。
相关问题
C语言二分查找非递归
C语言二分查找非递归是一种查找算法,它可以在有序数组中快速查找指定元素的位置。其基本思想是将数组分成两部分,判断要查找的元素在哪一部分中,然后再在该部分中继续进行二分查找,直到找到该元素或者确定该元素不存在为止。下面是C语言二分查找非递归的代码实现:
int binarySearch(int arr[], int len, int key) {
int low = 0, high = len - 1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] > key) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
其中,arr为有序数组,len为数组长度,key为要查找的元素。在函数中,首先定义了low和high两个变量,分别表示数组的左右边界。然后,使用while循环进行二分查找,每次将数组分成两部分,判断要查找的元素在哪一部分中,然后再在该部分中继续进行二分查找,直到找到该元素或者确定该元素不存在为止。如果找到该元素,则返回该元素的下标;否则,返回-1表示该元素不存在。
poj2366C语言二分查找
这道题目是要在两个数组中找出是否有两个数相加等于10000。下面是一个使用C语言二分查找的例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
int a[50005];
int main()
{
int n, m, k, flag = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
sort(a, a + n);
scanf("%d", &m);
for (int i = 0; i < m; i++)
{
scanf("%d", &k);
if (binary_search(a, a + n, 10000 - k))
{
flag = 1;
}
}
if (flag == 1)
printf("YES\n");
else
printf("NO\n");
return 0;
}
```
这个例子中,我们首先输入了一个整数n,表示第一个数组的长度,然后输入n个整数,将它们存储在数组a中。接着,我们对数组a进行排序,以便后面使用二分查找。然后,我们输入一个整数m,表示第二个数组的长度,然后输入m个整数,将它们存储在变量k中。接下来,我们使用二分查找在数组a中查找是否存在一个数等于10000-k,如果存在,我们将flag设置为1。最后,我们根据flag的值输出YES或NO。