二分法查找代码(C++ 输入10个数(有序),用二分法进行查找某个数是否在其中.)

:暂无数据 2026-08-01 16:20:02 :0

二分法查找代码(C++ 输入10个数(有序),用二分法进行查找某个数是否在其中.)

本篇文章给大家谈谈二分法查找代码,以及C++ 输入10个数(有序),用二分法进行查找某个数是否在其中.对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录

C++ 输入10个数(有序),用二分法进行查找某个数是否在其中.

#include 《iostream》

using namespace std;
//a是查找的数组,二分法查找的前提条件是a数据的排序是有序的。key是待查找的变量,n是数组a的长度。
int binary( int *a, int key, int n )
{
    int left = 0, right = n - 1, mid = 0;
    mid = ( left + right ) / 2;
    while( left 《 right && a[mid] != key )
    {
        if( a[mid] 《 key )
        left = mid + 1;
        else if( a[mid] 》 key )
        right = mid - 1;
        mid = ( left + right ) / 2;
    }
    if( a[mid] == key )   return mid;
    return -1;
}

//调用:
//查找数组b在数组a中的下标的位置(当a中不存在b中的数据时,用-1代替)。
int main()
{
    int a = {1,2,3,4,5,6,7,8,9,12};
    int i,b,c;

    cout 《《 “从小到大输入10个整数:“;
    for(i=0;i《10;i++)
        cin  》》 a[i];

    cout 《《 “输入要查找的数:“;
    cin  》》 b;
    c = binary(a,b,10);
    if(c!=-1)
      cout 《《 “找到,序号:“《《c+1《《endl;
    else
      cout 《《“没找到“《《endl;
    return 0;
}

二分法查找的C代码

#include《stdio.h》//递归算法int recurbinary(int *a, int key, int low, int high){    int mid;    if(low 》 high)        return -1;    mid = (low + high)/2;    if(a[mid] == key) return mid;    else if(a[mid] 》 key)        return recurbinary(a,key,low,mid -1);    else        return recurbinary(a,key,mid + 1,high);}//非递归算法int binary( int *a, int key, int n ){    int left = 0, right = n - 1, mid = 0;    mid = ( left + right ) / 2;    while( left 《 right && a[mid] != key )    {        if( a[mid] 《 key ) {            left = mid + 1;        } else if( a[mid] 》 key ) {            right = mid - 1;        }        mid = ( left + right ) / 2;    }    if( a[mid] == key )        return mid;    return -1;}int main(){    int a = {1,2,3,4,5,6,7,8,9,12,13,45,67,89,99,101,111,123,134,565,677};    int b = {677,1,7,11,67};    int i;    for( i=0; i《sizeof(b)/sizeof(b); i++ )    {        //printf( “%d\n“, recurbinary(a, b[i],0,sizeof(a)/sizeof(a)-1) );        printf( “%d\n“, binary( a, b[i], sizeof(a)/sizeof(a)));    }    return 0;}

怎么样利用二分法查找数据中的字串JAVA

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

二分查找优缺点

优点是比较次数少,查找速度快,平均性能好;

其缺点是要求待查表为有序表,且插入删除困难。

因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
使用条件:查找序列是顺序结构,有序。


过程

首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

利用循环的方式实现二分法查找

public class BinarySearch {
public static void main(String args) {
// 生成一个随机数组        int array = suiji();
// 对随机数组排序        Arrays.sort(array);
System.out.println(“产生的随机数组为: “ + Arrays.toString(array));

System.out.println(“要进行查找的值: “);
Scanner input = new Scanner(System.in);
// 进行查找的目标值        int aim = input.nextInt();

// 使用二分法查找        int index = binarySearch(array, aim);
System.out.println(“查找的值的索引位置: “ + index);

}

/**     * 生成一个随机数组     *
* @return 返回值,返回一个随机数组     */
private static int suiji() {
// random.nextInt(n)+m  返回m到m+n-1之间的随机数        int n = new Random().nextInt(6) + 5;
int array = new int[n];
// 循环遍历为数组赋值        for (int i = 0; i 《 array.length; i++) {
array[i] = new Random().nextInt(100);
}
return array;
}

/**     * 二分法查找  ---循环的方式实现     *
* @param array 要查找的数组     * @param aim 要查找的值     * @return 返回值,成功返回索引,失败返回-1     */
private static int binarySearch(int array, int aim) {
// 数组最小索引值        int left = 0;
// 数组最大索引值        int right = array.length - 1;
int mid;
while (left 《= right) {
mid = (left + right) / 2;
// 若查找数值比中间值小,则以整个查找范围的前半部分作为新的查找范围            if (aim 《 array[mid]) {
right = mid - 1;
// 若查找数值比中间值大,则以整个查找范围的后半部分作为新的查找范围            } else if (aim 》 array[mid]) {
left = mid + 1;
// 若查找数据与中间元素值正好相等,则放回中间元素值的索引      } else {
return mid;
}
}
return -1;
}}
运行结果演示:

由以上运行结果我们得知,如果要查找的数据在数组中存在,则输出该数据在数组中的索引;如果不存在则输出 -1 ,也就是打印 -1 则该数在数组中不存在,反之则存在。

四、利用递归的方式实现二分法查找

public class BinarySearch2 {
public static void main(String args) {
// 生成一个随机数组        int array = suiji();
// 对随机数组排序        Arrays.sort(array);
System.out.println(“产生的随机数组为: “ + Arrays.toString(array));

System.out.println(“要进行查找的值: “);
Scanner input = new Scanner(System.in);
// 进行查找的目标值        int aim = input.nextInt();

// 使用二分法查找        int index = binarySearch(array, aim, 0, array.length - 1);
System.out.println(“查找的值的索引位置: “ + index);
}

/**     * 生成一个随机数组     *     * @return 返回值,返回一个随机数组     */
private static int suiji() {
// Random.nextInt(n)+m  返回m到m+n-1之间的随机数        int n = new Random().nextInt(6) + 5;
int array = new int[n];
// 循环遍历为数组赋值        for (int i = 0; i 《 array.length; i++) {
array[i] = new Random().nextInt(100);
}
return array;
}

/**     * 二分法查找 ---递归的方式     *     * @param array 要查找的数组     * @param aim   要查找的值     * @param left  左边最小值     * @param right 右边最大值     * @return 返回值,成功返回索引,失败返回-1     */
private static int binarySearch(int array, int aim, int left, int right) {
if (aim 《 array[left] || aim 》 array[right]) {
return -1;
}
// 找中间值        int mid = (left + right) / 2;
if (array[mid] == aim) {
return mid;
} else if (array[mid] 》 aim) {
//如果中间值大于要找的值则从左边一半继续递归            return binarySearch(array, aim, left, mid - 1);
} else {
//如果中间值小于要找的值则从右边一半继续递归            return binarySearch(array, aim, mid + 1, array.length-1);
}
}}
运行结果演示:

总结:

递归相较于循环,代码比较简洁,但是时间和空间消耗比较大,效率低。在实际的学习与工作中,根据情况选择使用。通常我们如果使用循环实现代码只要不是太繁琐都选择循环的方式实现~

二分法查找 C++

在VC6.0中运行通过。
》代码一:(在代码三中指出了您没注意到的一些问题)》》:
#include《iostream》
using namespace std;
int main(void)
{
int BinSearch(int R,int K,int n);
int a,x,i,result;
for(i=0;i《10;i++)
cin》》a[i];
cin》》x;
result=BinSearch(a,x,10);
cout《《result《《endl;
return 0;
}
int BinSearch(int R,int K,int n)
{ //在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,失败时返回零
int low=0,high=n-1,mid; //置当前查找区间上、下界的初值
mid=(low+high)/2;
while(low《=high&&R[mid]!=K)
{ //当前查找区间R[low..high]非空
if(R[mid] 》K)
high=mid-1; //继续在R[low..mid-1]中查找
if(R[mid] 《K)
low=mid+1; //继续在R[mid+1..high]中查找
mid=(low+high)/2;
} //BinSeareh
if(R[mid]==K) return mid; //查找成功返回
else return -1; //当low》high时表示查找区间为空,查找失败
}
其实如果是在10个数中查找的话,参数n完全没必要
》代码二:》》:
#include《iostream》
using namespace std;
int main(void)
{
int BinSearch(int R,int K);
int a,x,i,result;
for(i=0;i《10;i++)
cin》》a[i];
cin》》x;
result=BinSearch(a,x);
cout《《result《《endl;
return 0;
}
int BinSearch(int R,int K)
{ //在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,失败时返回零
int low=0,high=10-1,mid; //置当前查找区间上、下界的初值
mid=(low+high)/2;
while(low《=high&&R[mid]!=K)
{ //当前查找区间R[low..high]非空
if(R[mid] 》K)
high=mid-1; //继续在R[low..mid-1]中查找
if(R[mid] 《K)
low=mid+1; //继续在R[mid+1..high]中查找
mid=(low+high)/2;
} //BinSeareh
if(R[mid]==K) return mid; //查找成功返回
else return -1; //当low》high时表示查找区间为空,查找失败
}
》代码三:》》:
如果您想在若干个(也就是您输入的元素个数不固定)你输入的元素中查找一个数,可以加一个参数n,用它传递数组中元素的个数
#include《iostream》
using namespace std;
int main(void)
{
int BinSearch(int R,int K,int n);//函数声明,如果定义在main函数之前,可以不要函数声明 具体参照参照xiang__198的代码
int a,x,i,result;
int num;
cout《《“您想输入几个数?“《《endl;
cin》》num;
cout《《“请输入“《《num《《“个已经由小到大排好序的数:“《《endl;
for(i=0;i《num;i++)
cin》》a[i];
cout《《“请输入待查找的数:“《《endl;
cin》》x;
result=BinSearch(a,x,num);//由于定义的函数要返回一个函数值,所以在主函数中要定义一个变量来接收这个返回值,数组元素做实参传递的是数组元素的首地址。故这里的调用写成result=BinSearch(a,x,num);,其中的a代表的是数组的首地址
cout《《“查找结果:“《《endl;
cout《《result《《endl;
return 0;
}
int BinSearch(int R,int K,int n)//不能写成int BinSearch(int R,int K,n),注意形参不能为一个常量int BinSearch(int R,int K,10) 也不对
{ //在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,失败时返回零
int low=0,high=n-1,mid; //置当前查找区间上、下界的初值
mid=(low+high)/2;
while(low《=high&&R[mid]!=K)//查找区间不为空时,如果查找到,则R[mid]!=K,结束循环,否则缩小查找空间继续查找,你的这里少了一个R[mid]!=K,所以即使查找到,也不会输出查找结果,因为形成了死循环
{ //当前查找区间R[low..high]非空
if(R[mid] 》K)
high=mid-1; //继续在R[low..mid-1]中查找
if(R[mid] 《K)
low=mid+1; //继续在R[mid+1..high]中查找
mid=(low+high)/2;
} //BinSeareh
if(R[mid]==K)return mid; //查找成功返回
else return -1; //当low》high时表示查找区间为空,查找失败
}
对我的回答有疑问可以Hi我!恭候!

求二分法查找演示C语言源代码

二分法查找算法:

1. 主要思想是:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段 中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。


2. 时间复杂度:  O(log2n)。


3. C语言源代码(小例子)

  search函数即为核心代码:递归查找

#include《stdio.h》
int search(int *a, int num, int low, int high)
{
int mid =(low + high)/2;
if(low《=high)
{
if(num 《 a[mid])
return search(a, num, low, mid-1); //加return
if(num 》 a[mid])
return search(a, num, mid+1, high);//加return
if(num==a[mid])                     
return 1;
}
else
return 0;
}
int main(){
int a = {0, 1, 2, 3, 4, 5, 9, 11, 12, 13, 15};
if(search(a, 11, 0, 10)==1)
printf(“success!!“);
else 
printf(“failed!!“);
}

二分法查找 c++

int binary_search(int *a, int length, int n) //length为数组长度, n为要查找的数
{
if(n《a||n》a[length-1])return -1; //没有合适的数
int left=0, right=length-1, middle;
while(left《right)
{
middle=(left+right)/2;
if(n》a[middle])left=middle;
else if(n《a[middle])right=middle;
else break; //这时求的值为n的数组下标,为middle;
}
while(middle》=0) //若有重复的n, 查找最前面的位置
{
if(a[middle]!=a[middle-1])return middle;
middle--;
}
}

求解C#中的二分法查找(详细说明一下,有代码最好)

int
search(int
a,
int
left,
int
right,
int
key)
{
int
mid;
//计算当前检索的数组的中间位置
while(left
《=
right)
mid
=
(left
+
right)/2
if
(
a[mid]
==
key)
{
return
mid;//如果中间元素与检索元素相等,则返回该元素的位置
}
else
if
(
a[mid]
《
key)
{
//如果中间元素比检索的元素小,则检索右边的子数组
left
=
mid+1;
}
else
{
//如果中间元素比检索的元素大,则检索左边的子数组
right
=
mid-1;;
}
}
printf(“你要找的元素没有找到。\n“);
return
-1;
}

二分查找的代码示例

/*二分查找:前提,该数组已经是一个有序数组,必须先排序,再查找。*/functionbinarySearch(&$array,$findVal,$leftIndex,$rightIndex){$middleIndex=round(($rightIndex+$leftIndex)/2);if($leftIndex》$rightIndex){echo’查无此数《br/》’;return;}if($findVal》$array[$middleIndex]){binarySearch($array,$findVal,$middleIndex+1,$rightIndex);}elseif($findVal《$array[$middleIndex]){binarySearch($array,$findVal,$leftIndex,$middleIndex-1);}else{echo找到数据:index=$middleIndex;value=$array[$middleIndex]《br/》;if($array[$middleIndex+1]==$array[$middleIndex]&&$leftIndex《$rightIndex){binarySearch($array,$findVal,$middleIndex+1,$rightIndex);}if($array[$middleIndex-1]==$array[$middleIndex]&&$leftIndex《$rightIndex){binarySearch($array,$findVal,$leftIndex,$middleIndex-1);}}}

如何编写二分查找和顺序查找的C语言代码

二分查找:
int search(int a,int x,int n)
{
int mid=0;
int low=0;
int high=n;
while(low《=high)
{
mid=(low+high)/2;
if(a[mid]==x)
{ return mid; }
else if(x《a[mid])
{ high=mid-1; }
else
{ low=high+1; }
}
return -1;
}
顺序查找:
int search(int a,int x,int n)
{
int i;
for(i=0;i《n;i++)
{
if(a[i]==x)
return i;
else
return -1;
}
}

关于本次二分法查找代码和C++ 输入10个数(有序),用二分法进行查找某个数是否在其中.的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

二分法查找代码(C++ 输入10个数(有序),用二分法进行查找某个数是否在其中.)

本文编辑:admin

更多文章:


协方差计算公式(协方差的计算公式)

协方差计算公式(协方差的计算公式)

这篇文章给大家聊聊关于协方差计算公式,以及协方差的计算公式对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年10月11日 08:10

易语言网页api接口怎么调用(易语言,怎么读取网页json的api)

易语言网页api接口怎么调用(易语言,怎么读取网页json的api)

本篇文章给大家谈谈易语言网页api接口怎么调用,以及易语言,怎么读取网页json的api对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年10月11日 08:00

majority of(the majority of 和 a majority of的区别以及用法例句)

majority of(the majority of 和 a majority of的区别以及用法例句)

这篇文章给大家聊聊关于majority of,以及the majority of 和 a majority of的区别以及用法例句对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年10月11日 07:40

汉字机内码查询表(1个汉字的机内码是几位谢谢)

汉字机内码查询表(1个汉字的机内码是几位谢谢)

大家好,关于汉字机内码查询表很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于1个汉字的机内码是几位谢谢的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2026年10月11日 07:20

promote翻译(英语翻译倡导怎么说)

promote翻译(英语翻译倡导怎么说)

其实promote翻译的问题并不复杂,但是又很多的朋友都不太了解英语翻译倡导怎么说,因此呢,今天小编就来为大家分享promote翻译的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 06:30

用手机如何导航?开车用手机导航哪个软件最好

用手机如何导航?开车用手机导航哪个软件最好

今天给各位分享用手机如何导航的知识,其中也会对用手机如何导航进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月11日 06:20

多线程技术有什么用(多线程有什么作用)

多线程技术有什么用(多线程有什么作用)

其实多线程技术有什么用的问题并不复杂,但是又很多的朋友都不太了解多线程有什么作用,因此呢,今天小编就来为大家分享多线程技术有什么用的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 05:40

another time(another time和other time的区别)

another time(another time和other time的区别)

大家好,another time相信很多的网友都不是很明白,包括another time和other time的区别也是一样,不过没有关系,接下来就来为大家分享关于another time和another time和other time的区

2026年10月11日 05:00

java开发工具包jdk(JDK是什么意思)

java开发工具包jdk(JDK是什么意思)

其实java开发工具包jdk的问题并不复杂,但是又很多的朋友都不太了解JDK是什么意思,因此呢,今天小编就来为大家分享java开发工具包jdk的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 04:50

mysql 命令(MySQL的基本命令)

mysql 命令(MySQL的基本命令)

大家好,如果您还对mysql 命令不太了解,没有关系,今天就由本站为大家分享mysql 命令的知识,包括MySQL的基本命令的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月11日 03:00

最近更新

majority of(the majority of 和 a majority of的区别以及用法例句)
2026-10-11 07:40:02 浏览:0
热门文章

标签列表