实验12:二分查找

C语言实验 飞快学 1503浏览

一、实验目的

理解二分查找的原理和特点;理解二分查找的代码。

二、实验内容

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。

二分查找方法:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

通过在序列 6, 12, 15, 18, 22, 25, 28, 35, 46, 58, 60 中寻找 12 和 15 的过程,了解二分查找的运行流程。

三、实验要点

二分查找法是高效的查找方法,但前提是所有顺序必须按照关键字来排序,顺序存储。

四、代码

#include <stdio.h>
 
int BinarySearch(int v[ ], int n, int x)
{
    int low=0, high=n-1, mid;
    while (low <= high) {
        mid = (low+high)/2;
        if (x < v[mid])
            high = mid - 1;
        else if (x > v[mid])
            low = mid + 1;
        else /* found match */
            return mid;
    }
    return -1;  /* no match */
}
 
int main()
{
    int i, n, v[10]= { 1, 3, 4, 5,  12, 16, 19, 20, 21, 33};
    scanf("%d", &n);
    i = BinarySearch(v, 10, n);  /* 在长度为10的数组 v 中搜索 n */
    if (i==-1)
        printf("Not Found\n");
    else
        printf("%d is at position %d\n", n, i);
    return 0;
}

五、实验小结

总结实验过程中遇到的问题及解决办法,不少于50字。