• C++折半查找具体介绍及用法


    1. 折半查找介绍

    1.1 定义

    折半查找也称二分查找,是一种在有序数组中查找某一特定元素的搜索算法,每一次查找,搜索范围均缩小一半,效率较高。如果数组是乱序状态,则应排序,再进行查找。

    1.2 基本原理

    搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半 。

    1.3 时间复杂度与空间复杂度

    log2n,(是以2为底,n的对数),所以时间复杂度可以表示O()=O(logn)。

    二分查找只需要额外存储三个变量:最大值 ,最小值 和 中点,空间复杂度为常数 O(1)。

    1.4 优缺点

    • 优点:比较次数少,查找速度快,平均性能好。
    • 缺点:要求待查表为有序表,且插入删除困难。

    2. 代码实现

    2.1 代码设计

    在这里插入图片描述

    1.  输入需要查找的元素,我们输入的是38;left是有序数组最左端0,是最小值,right是有序数组最右端10,是最大值,mid为数组1/2位置,即array[5];
    2. 38比array[5] = 19大,因此left等于原mid+1,即array[6] = 26,right不变;新mid为(left+right)/2 = (6+10)/2 = 8;
    3. 38比array[8] = 36大,因此left等于上一次mid+1,即array[9] = 38,right不变;新mid为(left+right)/2 = (9+10)/2 = 9;
    4. 38等于array[9],mid与left重合, 查找成功,返回数组下标9.

    2.2 代码实现

    1. #include
    2. using namespace std;
    3. int binarySearch(int array[],int len,int target) {
    4. int left=0;
    5. int right=len-1;
    6. while(left<=right){
    7. int mid=(right+left)/2;
    8. if(array[mid]==target){
    9. return mid;
    10. } else if(array[mid]
    11. left=mid+1;
    12. } else if(array[mid]>target){
    13. right=mid-1;
    14. }
    15. }
    16. return -1;
    17. }
    18. int main()
    19. {
    20. int array[]={2,3,4,5,15,19,26,27,36,38,45};
    21. int key = 0,ret;
    22. printf("请输入需要查找的数字:");
    23. cin>>key;
    24. ret=binarySearch(array,sizeof(array)/sizeof(int),key);
    25. if(ret<0)
    26. printf("查找失败\n");
    27. else
    28. printf("该数字为数组第%d个元素\n",ret+1);
    29. return 0;
    30. }

    运行结果:

    你的点赞、关注是我创作的最大动力(^_^)

    如果有不懂的的问题,可以留在评论区里,我会尽快回复的(✪ω✪)

  • 相关阅读:
    论文阅读-2 | Meta-Learning with Task-Adaptive Loss Function for Few Shot Learning
    LinkedList源码分析
    MongoDB配置文件.conf配置项介绍
    ClickHouse(03)ClickHouse怎么安装和部署
    【5G NR】RRC Reject解析
    MYSQL各种子查询操作总结
    Elasticsearch如何创建索引,添加,删除,更新文档
    【期中复习】深度学习
    前端:练习页面,(致美页面练习)
    解决github无法访问,访问慢或者图裂问题
  • 原文地址:https://blog.csdn.net/yaozhiyuannb/article/details/126526621