数组查找(Array Searching)

数组查找

数组查找操作


查找数组中的值可通过比较数组的值与指定值来实现,此操作有以下几种实现方式:

线性或者序列查找


线性查找算法通过序列迭代的方式从数组中查找指定的值,直到找到或者迭代结束位置。

当数组元素列表为无序数组并且只执行一次查找时,使用线性查找是最好的方式。其时间复杂度依赖于数组的大小。

线性查找时间复杂度:
int main(){
    int array[100],search,c,n;

    printf("输入输入的长度");

    scanf("%d",&n);
    printf("输入的数值为 %d",n);
    //为数组元素赋值
    for (c=0;c<n;c++){
        scanf("%d",&array[c]);
    }
    printf("输入要在数组中查找的值");
    scanf("%d",&search);

    for(c=0;c<n;c++){
        if (array[c]==search){
            printf("%d 查找的值位于索引 %d\n",serach,c+1);
            break;
        }
    }
    if (c==n){
        printf("%d 数组中不存在要查找的值",search);
    }
    return 0;


}

时间复杂度

  • 平均:O(n)
  • 最好:O(1)
  • 最差:O(n)

平均时间复杂度为O(n)时,可能查找的元素位于元素表末尾或者数组中不存在,线性查找需要遍历每个元素值,直到找到为止。查找算法的时间复杂度最佳和最坏情况分别为O(1)和O(n),因为在第一次迭代或者在最后一次迭代时才能找到要搜索的元素。

二分查找


线性查找有一个较大的缺点,在较大的数组中查找元素时,将导致时间复杂度上升,随着数组的增长,时间复杂度呈线性增长。在某些情况下,可以使用二分查找解决这个问题。

二分查找类似于我们查找书中一个特定的页码。我们在中间随机打开书的一页,把搜索范围缩小到书的左边或者右边,当页码有序的情况下,这个操作最终能找到目标页码。

二分查找时间复杂度:O(log n)
int main(){
    int c,first,last,middle,n,search,array[100];
    printf("输入数组元素的数量");
    scanf("%d",&n);

    printf("输入数量为%d的有序数组",n);
    for (c=0;c<n;c++{
        scanf("%d",&array[c]);
    })
    printf("输入要查找的值");
    scanf("%d",&search);

    first=0;
    last=n-1;
    middle=(first+last)/2;

    while(first<+last){
        if (array[middle]<search>){
            first=middle+1;
        }else if (array[middle]==search){
            printf("查找的元素 %d 索引位置为 %d \n",search,middle+1);
        }else{
            last=middle-1;
        }
        middle=(first+last)/2;
    }
    if (first>last)
        pintf("未能在数组中查找到目标元素: %d",serach);
    return 0;
}

更多内容,欢迎关注:


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值