数组是C语言中常用的数据结构之一,而二分查找是一种高效的查找算法。本文将介绍如何使用C语言实现对数组的二分查找。
参考代码
#include<stdio.h>
int look_up(int a[],int n,int z);
int main()
{
int a[] = {1,2,3,4,5,6,7,8,9,10};
int n = 0;
int k = look_up(a,n,sizeof(a)/sizeof(int) - 1);
if (k == -1)
{
printf("No such element exists\n");
}
else
{
printf("The element is %d\n",k);
}
return 0;
}
int look_up(int a[],int n,int z)
{
int low = 0;
int high = z;
while (low <= high)
{
int mid = (low + high)/2;
if (a[mid] == n)
{
return mid;
}
if (a[mid] < n)
{
low = mid + 1;
}
if (a[mid] > n)
{
high = mid - 1;
}
}
return -1;
}
代码详解
在主函数main()中,首先定义了一个包含有序元素的数组a,并初始化了一个变量n为0。然后调用了look_up()函数来查找数组中是否存在元素n。如果找到了元素n,则输出该元素的索引;如果未找到,则输出"No such element exists"。
look_up()函数实现了二分查找算法。它接受一个数组a[],数组长度n,以及要查找的元素z作为参数。在函数内部,使用了一个while循环来不断缩小查找范围,直到找到目标元素或者确定目标元素不在数组中。
在每次循环中,函数计算中间位置mid,并将数组分为两部分。如果中间元素等于目标元素n,则返回中间位置mid;如果中间元素小于目标元素n,则将左指针low移动到mid+1;如果中间元素大于目标元素n,则将右指针high移动到mid-1。
最后,如果循环结束时仍未找到目标元素,则返回-1,表示未找到目标元素。
这段代码实现了对有序数组的二分查找算法,能够高效地查找目标元素。