顺序搜索算法与二分搜索算法

文章介绍了在C语言中如何实现线性搜索和二分搜索来查找数组中的元素。线性搜索适用于无序数组,而二分搜索要求数组先排序,但其效率更高。二分搜索通过不断缩小搜索区间来提高查找速度。
摘要由CSDN通过智能技术生成

设A[1···n]为一个n个元素的数组,判定给定元素x是否在A 中。

最基础且最简单的方法是顺序搜索,由于元素最大比较次数和数组的大小呈线性关系,也叫线性搜索。

C语言实现:

#include <stdio.h>
int main(){
    int a[10]={67,3,17,80,24,56,11,9,76,34};
    int x,i=0;
    printf("请输入要查找的数字:\n");
    scanf("%d",&x);
    for(i=1;i<=10;i++){
        if(a[i]==x){
            printf("%d在第%d个",x,i);
        }else{
            printf("该数字不在数组里");
            break;
        }
    }
}

所以,当对不明确数组中元素的信息时,对数组A 的所有元素进行扫描是不可避免的,特别是当A数组很大时,效率就会很慢。因此有一个更有效的方法——二分搜索,不过该方法的前提是数组A是一个有序数组,如按升序排列等,所以要提前对数组进行排序,这个在我其他文章里有讲到,可以去看看。

二分搜索法的思路如下:

先设定low,high,mid分别为被搜索数组下标最小值、最大值和中间值。将所要查找的数字x与A[mid]作比较,若x=A[mid],则找到了,i=mid,返回i即可;若x>mid,则将low=mid+1,再重复上述过程,大概示例图如下(电脑上画的有点丑将就看看吧)

C语言实现:

#include <stdio.h>
int main(){
    int a[18]={1,4,5,7,8,9,10,12,15,22,23,27,32,35,41,50,52,60};
    int x,i=-1;// 将i的初始值设置为-1,便于后面判断是否找到目标元素
    printf("请输入要查找的数字:\n");
    scanf("%d",&x);
    int low,high,mid;
    low=0;// 数组下标从0开始
    high=17;// 数组下标范围为0~17
    while(low<=high){
        mid=(low+high)/2;
        if(x==a[mid]){
            i=mid;
            break;// 找到目标元素后停止查找
        }else if(x<a[mid]){
            high=mid-1;
        }else{
            low=mid+1;
        }
    }
    if (i == -1) {
        printf("未找到\n"); // 如果i的值没有被更新,则输出“未找到”
    } else {
        printf("你要查找的数字在第%d个\n", i + 1); // 输出结果时需要将下标加1
    }
    return 0;
}

对于一个大小为n的排序数组,算法BINARYSEARCH执行比较的最大次数为

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fno.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值