数组是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,表示未找到目标元素。

这段代码实现了对有序数组的二分查找算法,能够高效地查找目标元素。