用c语言实现二分查找
时间: 2023-10-27 14:07:00 浏览: 44
二分查找是一种高效的查找算法,可以在有序数组中快速查找指定元素。以下是用C语言实现二分查找的代码示例:
```
int binarySearch(int arr[], int left, int right, int target) {
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
```
该函数接受一个有序数组arr、数组左边界left、数组右边界right和目标元素target作为参数,返回目标元素在数组中的下标,如果目标元素不存在于数组中,则返回-1。
函数的实现思路是:首先计算出数组的中间位置mid,然后将目标元素与中间位置的元素进行比较,如果相等则返回mid,如果目标元素比中间位置的元素大,则在右半部分继续查找,否则在左半部分继续查找,直到找到目标元素或者左右边界重合为止。
相关问题
用c语言实现二分查找的完整代码
以下是用C语言实现二分查找的完整代码:
```
#include <stdio.h>
#include <string.h>
int binary_search(int arr[], int k, int sz) {
//算法实现
int left=0;
int right=sz-1;
while(left<=right) {
int mid=(left+right)/2; //中间元素下标
if(arr[mid] < k) {
left=mid+1;
} else if(arr[mid] > k) {
right=mid-1;
} else {
return mid;
}
}
return -1;
}
int main() {
//二分查找
//在一个有序数组中查找具体的某个数
//如果找到了返回,这个数的下标,找不到的返回-1
int arr[]={1,2,3,4,5,6,7,8,9,10};
int k=7;
int sz=sizeof(arr)/sizeof(arr[0]);
int ret=binary_search(arr, k, sz);
if(ret == -1) {
printf("找不到指定数字\n");
} else {
printf("找到了,下标是: %d\n ", ret);
}
return 0;
}
```
以上代码实现了一个简单的二分查找算法,可以在一个有序数组中查找具体的某个数。如果找到了,返回这个数的下标,找不到则返回-1。
c语言实现二分查找代码
二分查找法是一种高效的查找方法,它要求被查找的数组必须有序。以下是C语言实现二分查找法的代码:
```c
void BinarySearch(int* arr, int key, int left, int right) {
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] > key) {
right = mid - 1;
} else if (arr[mid] < key) {
left = mid + 1;
} else {
printf("找到了,对应的下标为:%d\n", mid);
return;
}
}
printf("找不到\n");
}
```
在这个代码中,我们通过不断缩小查找范围,从数组的中间开始与目标数字比较。如果中间元素大于目标数字,那么目标数字一定在左侧范围内,将右指针移到中间元素的左侧;如果中间元素小于目标数字,那么目标数字一定在右侧范围内,将左指针移到中间元素的右侧;如果中间元素等于目标数字,则找到了目标数字的下标。如果左指针大于右指针,表示没有找到目标数字。