C语言:顺序查找和二分查找

任务代码:

顺序查找元素:

#include <stdio.h>

#define SIZE 10
int main()
{
    int a[SIZE]={1,2,3,4,5,6,7,8,9,10};
    int index=-1;//如果末尾没有找到,默认函数为=-1
    int i,number;
    printf("请输入要查找的数据:");
    scanf("%d",&number);

    //顺序查找
    for(i=0;i<SIZE;i++)
    {
        if(a[i]==number)
        {
            index=i;
            break;
        }
    }
    
    //输出结果
    if(index>0)
    {
        printf("找到了这个数%d,位于数组的第%d个!",number,index+1);
    }
    else
    {
        printf("没有找到数字!");
    }
    return 0;
}




二分查找方法:

#include <stdio.h>

#define SIZE 10
int main()
{
    int a[SIZE]={1,2,3,4,5,6,7,8,9,10};
    int index=-1;//如果末尾没有找到,默认函数为=-1
    int i,key;
    printf("请输入要查找的数据:");
    scanf("%d",&key);

    //二分查找
    /*二分查找的前提是你所查找的数字必须已经是会有序数组!!!!*/
    int low,high,mid;
    low=0;//代表数组第一个数
    high=SIZE-1;//代表数组最后一个数
    while(low<=high)//在没有查找到最后一个数的情况下继续执行
    {
        mid=(low+high)/2;//设置mid为数组中间那个数
        if(a[mid]==key)//恰好等于的情况
        {
            index=mid;
            break;
        }
        else
        if(a[mid]>key)
        {
              high=mid-1;//将mid赋值给高的那一边的下一位
        }
        else
        {
            low=mid+1;//将mid 赋值给低的那一边的下一位
        }
    }


    //输出结果
    if(index>0)
    {
        printf("找到了这个数%d,位于数组的第%d个!",key,index+1);
    }
    else
    {
        printf("没有找到数字!");
    }
    return 0;
}



执行情况:


知识总结:





!!!!局限性是,二分查找必须针对有序的,无重复数列!!!!在使用的时候必须先将数列有序化,如果要技术出现次数必须使用其他算法!

心得体会;


  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
顺序查找二分查找是两种常用的查找算法。 顺序查找是一种简单但效率较低的查找方法。在给定的数组中,从头到尾逐个比较元素,直到找到目标元素或搜索到数组末尾。对于无序数组来说,顺序查找是一种可行的方法。在你提供的代码中,seqSearch函数使用了顺序查找的算法。通过一个while循环,从后向前逐个比较数组元素,直到找到目标元素或者遍历完整个数组。如果找到目标元素,返回它的下标;如果没有找到,返回0表示未找到。 二分查找是一种更高效的查找方法,适用于有序数组。它通过将目标元素与数组的中间元素进行比较,根据比较结果将搜索范围缩小一半。如果目标元素等于中间元素,则搜索结束。如果目标元素小于中间元素,则在左半部分继续查找;如果目标元素大于中间元素,则在右半部分继续查找。重复这个过程,直到找到目标元素或者搜索范围为空。在你提供的代码中没有包含二分查找的实现。 总结来说,顺序查找适用于无序数组,而二分查找适用于有序数组。如果你想使用二分查找算法,你需要先对数组进行排序,然后再使用二分查找来查找目标元素。 你提到了C语言,在C语言中,你可以使用标准库函数来实现二分查找,如binary_search。你可以通过包含头文件<cstdlib>来使用这个函数。另外,你也可以自己实现二分查找算法。以下是一个基本的二分查找的伪代码示例: ``` int binarySearch(int arr[], int target, int low, int high) { while (low <= high) { int mid = low + (high - low) / 2; if (arr[mid == target) { return mid; } else if (arr[mid < target) { low = mid + 1; } else { high = mid - 1; } } return -1; // 表示未找到 } ``` 以上伪代码演示了一个典型的二分查找算法实现。它接受一个有序数组arr、目标元素target以及搜索范围的上界和下界low和high。通过不断调整搜索范围的上下界,并与中间元素进行比较,来逐渐缩小搜索范围。如果找到目标元素,返回它的下标;如果搜索范围为空,则表示未找到目标元素,返回-1。 希望这些信息能对你有所帮助,如果你还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值