C++实现折半查找

 更新时间:2020年11月01日 10:05:31   作者:Who_Am_I.  
这篇文章主要为大家详细介绍了C++实现折半查找,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C++实现折半查找的具体代码,供大家参考,具体内容如下

折半查找

定义:

计算机科学中,折半搜索(英语:half-interval search),也称二分搜索(英语:binary search)、对数搜索(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法。

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

代码:

#include <iostream>
using namespace std;

int Search_Bin(int A[],int key,int n){
 int low = 0;
 int high = n-1;
 int mid;
 while(low<=high){
 mid=(low+high)/2;
 if(key==A[mid]){
  return mid;
 }
 else if(key<A[mid]){
  high=mid-1;
 }
 else{
  low=mid+1;
 }
 }
 return 0;
}

void sort(int A[],int n){
 //冒泡法排序
 for(int i=0;i<n-1;i++){
 for(int j=0;j<n-i-1;j++){
  if(A[j]>A[j+1]){
  int t=A[j];
  A[j]=A[j+1];
  A[j+1]=t;
  }
 }
 } 
}

void Print(int A[],int n){
 for(int i=0;i<n;i++){
 cout<<A[i]<<" ";
 }
 cout<<endl;
}
int main()
{
 int A[10]={2,1,4,6,7,3,8,0,5,9};
 Print(A,10);
 sort(A,10);
 Print(A,10);
 cout<<Search_Bin(A,7,10)+1;
 return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C语言数据结构之顺序数组的实现

    C语言数据结构之顺序数组的实现

    这篇文章主要介绍了C语言数据结构之顺序数组的实现的相关资料,这里提供实现实例,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-08-08
  • C语言中.与->的区别详细解析

    C语言中.与->的区别详细解析

    这篇文章主要给大家介绍了关于C语言中.与->区别的相关资料,这虽然是个小问题,但有时候很容易让人迷惑,因为有的时候用混淆了,程序编译不通过,需要的朋友可以参考下
    2023-06-06
  • C语言查找数组里数字重复次数的方法

    C语言查找数组里数字重复次数的方法

    这篇文章主要介绍了C语言查找数组里数字重复次数的方法,涉及C语言针对数组的遍历与判断技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • C++ 复制控制之复制构造函数的实现

    C++ 复制控制之复制构造函数的实现

    所谓的“复制控制”即通过这三个成员函数控制对象复制的过程,本文主要介绍了C++ 复制控制之复制构造函数的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • C语言实现静态链表的方法

    C语言实现静态链表的方法

    分享一段代码,一个静态链表的C语言实现,其中包含着一种简单的内存管理策略:固定大小的链式管理。
    2013-03-03
  • C语言中如何实现单链表删除指定结点

    C语言中如何实现单链表删除指定结点

    这篇文章主要介绍了C语言中如何实现单链表删除指定结点,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • C++中多线程的执行顺序如你预期吗

    C++中多线程的执行顺序如你预期吗

    这篇文章主要为大家详细介绍一下C++中多线程的执行顺序的相关资料,文中的示例代码讲解详细,对我们学习C++多线程有一定帮助,需要的可以参考一下
    2022-10-10
  • 深入ORACLE变量的定义与使用的详解

    深入ORACLE变量的定义与使用的详解

    本篇文章是对ORACLE变量的定义与使用进行了详细的分析与介绍,需要的朋友参考下
    2013-05-05
  • VC运用OPENGL加载BMP纹理图的实现方法汇总

    VC运用OPENGL加载BMP纹理图的实现方法汇总

    这篇文章主要介绍了VC运用OPENGL加载BMP纹理图的实现方法,对于更好的了解OpenGL很有帮助,需要的朋友可以参考下
    2014-07-07
  • C++中关于互斥量的全面认知

    C++中关于互斥量的全面认知

    线程的主要优势在于,能够通过全局变量来共享信息。不过,这种便捷的共享是有代价的:必须确保多个线程不会同时修改同一变量,或者某一线程不会读取正由其他线程修改的变量。为了防止出现线程某甲试图访 问一共享变量时,线程某乙正在对其进行修改。引入了互斥量
    2022-05-05

最新评论