C语言实现顺序表的顺序查找和折半查找

 更新时间:2020年11月01日 12:14:39   作者:Andrelia20171760  
这篇文章主要为大家详细介绍了C语言实现顺序表的顺序查找和折半查找,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

顺序查找:

#include <iostream>
using namespace std;
int SeqSearch(int r[],int n,int k)
{
 r[0]=k;//下标0用作哨兵存放要查询的数
 int i=n;
 while(r[i]!=k)//不用判断下标i是否越界
 {
 i--;
 }
 return i;
}
int main()
{
 int n;
 cout<<"请输入数组元素个数:"<<endl;
 cin>>n;
 int a[n+1];

 cout<<"请输入数组元素:"<<endl;
 for(int i=1;i<=n;i++)
 {
 cin>>a[i];
 }
 int k;
 cout<<"请输入要查询的数:"<<endl;
 cin>>k;
 for(int i=1;i<=n;i++)
 {
 cout<<a[i]<<" ";
 }
 cout<<endl;
 cout<<"该数在数组中的位置为:";
 cout<<SeqSearch(a,n,k);
 return 0;
}

折半查找:

#include<iostream>
using namespace std;
int BinSearch1(int r[],int n,int k)//非递归
{
 int low=1,high=n;//设置查找区间
 while(low<=high)//如果区间存在
 {
 int mid=(low+high)/2;
 if(k<r[mid])high=mid-1;//查找在左半区进行,回到while那一步
 else if(k>r[mid])low=mid+1;
 else return mid;
 }
 return 0;//如果区间不存在,则返回0,查找失败

}
int BinSearch2(int r[],int low,int high,int k)//递归
{
 int mid=(low+high)/2;
 if(low>high) return 0;
 else
 {
  if(k<r[mid])BinSearch2(r,low,mid-1,k);
  else if(k>r[mid])BinSearch2(r,mid+1,high,k);
  else return mid;
 }

}
int main()
{
 int n;
 cout<<"请输入数组元素个数:";
 cout<<endl;
 cin>>n;
 int a[n+1];

 cout<<"请输入数组元素:";
 cout<<endl;
 for(int i=1;i<=n;i++)
 {
 cin>>a[i];
 }
 cout<<"请输入要查找的数:";
 cout<<endl;
 int k;
 cin>>k;
 cout<<"该数在数组中的位置是:"<<endl;
 cout<<BinSearch1(a,n,k);cout<<endl;
 cout<<BinSearch2(a,1,n,k);
}

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

相关文章

  • dword ptr指令详细解析

    dword ptr指令详细解析

    8086CPU的指令,可以处理两种尺寸的数据,byte和word。所以在机器指令中要指明,指令进行的是字操作还是字节操作
    2013-09-09
  • C语言实现堆的简单操作的示例代码

    C语言实现堆的简单操作的示例代码

    堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。本文介绍了C语言中堆的一些简单操作,需要的可以参考一下
    2022-11-11
  • C++中的对象数组详细解析

    C++中的对象数组详细解析

    在建立数组时,同样要调用构造函数。如果有50个元素,就需要调用50次构造函数。在需要的时候,可以在定义数组时提供实参以实现初始化
    2013-10-10
  • C++你最好不要做的几点小结

    C++你最好不要做的几点小结

    整理如下,主要是方便刚开始接触c++的朋友
    2013-01-01
  • c++中拷贝构造函数的参数类型必须是引用

    c++中拷贝构造函数的参数类型必须是引用

    如果拷贝构造函数中的参数不是一个引用,即形如CClass(const CClass c_class),那么就相当于采用了传值的方式(pass-by-value),而传值的方式会调用该类的拷贝构造函数,从而造成无穷递归地调用拷贝构造函数。因此拷贝构造函数的参数必须是一个引用
    2013-07-07
  • C++中指向对象的常指针与指向常对象的指针详解

    C++中指向对象的常指针与指向常对象的指针详解

    如果一个变量已经被声明成常变量,则只能用指向常变量的指针变量指向它,而不能用一般的(非const型的)指针变量指向它
    2013-10-10
  • 对C语言中递归算法的深入解析

    对C语言中递归算法的深入解析

    C通过运行时堆栈支持递归函数的实现。递归函数就是直接或间接调用自身的函数
    2013-07-07
  • 详解C#byte数组怎么传入C

    详解C#byte数组怎么传入C

    在本篇内容里小编给大家整理了关于C#byte数组怎么传入C的相关知识点内容,有兴趣的朋友们学习参考下。
    2019-03-03
  • 如何在C语言中判断socket是否已经断开

    如何在C语言中判断socket是否已经断开

    如果不主动关闭socket的话,系统不会自动关闭的,除非当前进程挂掉了,操作系统把占用的socket回收了才会关闭。小编今天跟大家简单介绍下如何在C语言中判断socket是否已经断开
    2019-05-05
  • c++隐式类型转换示例分享

    c++隐式类型转换示例分享

    这篇文章主要介绍了c++隐式类型转换的二个示例,需要的朋友可以参考下
    2014-03-03

最新评论