24K纯学渣的学习笔记——折半查找算法(C语言)

在计算机科学中,折半搜索(英语:half-interval search),也称二分搜索(英语:binary search)、对数搜索(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法。
搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半 。(百度百科)

如果说折半查找有什么缺陷的话,那就是它要求的数据必须是已经排好序的(升序降序均可以,下面的程序是以升序为例的)。其时间复杂度为O(log n),下面的程序可以明显感受到其优越性。

/*头文件*/
#include
#include
#include

void creatRand(int x,int y,int n,int *a)  //创建范围在x~y的n个随机数并放到a数组中
{
    srand((unsigned)time(NULL));  //初始化随机函数的种子
    int i;
    for(i=0;ia[(rear+head)/2])  //如果中间值小于要查找的数据值,则说明要查找的数在后面部分
        {
            printf("The location is %d ,and the value is %d\n",(rear+head)/2,a[(rear+head)/2]);
            head=(rear+head)/2+1;
            times++; //累计一次
        }
        else if(x

附上程序运行情况:
查找成功的情况:

24K纯学渣的学习笔记——折半查找算法(C语言)_第1张图片

24K纯学渣的学习笔记——折半查找算法(C语言)_第2张图片

查找失败情况:
24K纯学渣的学习笔记——折半查找算法(C语言)_第3张图片

PS:如有不妥之处,欢迎评论指出!

你可能感兴趣的:(编程C语言,算法)