11.20顺序表查找,质数查找,折半查找,任意折查找

2023-11-21 07:12

本文主要是介绍11.20顺序表查找,质数查找,折半查找,任意折查找,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概念 

 

顺序表查找 

int search(int *a,int n, int key){
int i;
a[0]=key;
i=n;
while(a[i]!=key){
i--;}
return i;}

 就是从数组a的尾部开始找,a是从1开始计数的,所以找到0时,就说明查找失败。

顺序表找最大值

mv=a[1];
for(int i=2;i<=n;i++){if(mv<a[i]){mv=a[i]}
}

比较次数n-1 ,无论如何,都要比较n-1

同时找最大最小值

朴素查找

maxv=a[1];
minv=a[1];
for(int i=2;i<=n;i++){if(maxv<a[i]){maxv=a[i];}else if(minv > a[i]){minv=a[i];}
}

每次都先和最大值比,再和最小值比,如果比最大值大,那就一定不是最小值,就不需要再和最小值去比较 

最好情况为n-1,即升序,每次都是新的最大值,那么每次不需要和最小值比较,每次只和最大值比较即可

最坏情况为2(n-1),即降序 ,每次先和最大值比较,都不比最大值大,那么每次都需要和最小值比,即每个元素都要比两次

 快速查找

就是每次取两个,先让取的两个元素比较,就可以比较出一个大的和小的,这时就让大的和此时最大比,小的和最小的比,这样,每两个元素就只需要3次比较次数(一次元素自己比较,两次和最值比较)

相比朴素,朴素每两个要比较四次,每个元素都要和最大最小进行比较,快速就省了一次比较

若每次取三个,就起不到节省的次数,因为此时3个比较,就相当于3个里找最大值最小值,和每个元素直接比较,更加复杂

maxv=a[1],minv=a[1];
k=(n%2)+1;//n为奇数时,k从2开始;n为奇数时,k从1开始
while(k<n){//因为每次循环内都是k和k的下一位,所以k终止条件为n-1,不应该和n取等if(a[k]<a[k+1]){if(min>a[k]){minv=a[k];}if(maxv<a[k+1]){maxv=a[k+1];}}else{if(min>a[k+1]){minv=a[k+1];}if(maxv<a[k]){maxv=a[k];}}k+=2;
}

令k=(n%2)+1,n为奇数,如3时,那么从2开始,每次取两个,第一次就能取完,即2,3;如5时,2,3;4,5;

N为偶数,如2时,从1开始,每次取两个,第一次即取1,2 ;如4时,1,2;3,4;

查找区间质数

埃氏筛法

for(int k=2;k<=n;k++){
isp[k]=1;//先假定都是质数
}
for(int k=2;k<=n;k++){//从头开始遍历,2,3一定是质数if(isp[k]=1){//从底层开始,那么没有被标记过的一定是质数m=2*k;//基于找到质数基础上,在后续的序列中,把这个质数的所有倍数都删掉while(m<=n){//一直到越界isp[m]=0;//标记为不是质数m+=k;//每次都增加这个质数的一倍}}
}

不是质数的数,都可以被质数唯一表示 ,即每个数,都可以被质数表示

 

合数限定法 

while(!q.empty()){m=q.front();while(m*pk<=n){isp[m*pk]=0;enqueue(M,m);m=m*pk;}
}

欧拉筛法

 

每个数都可以被质数唯一表示,那么每个数一定存在构成其的最小质数,

那么在第一次遍历到那个最小质数时,就一定可以删除掉这个数 

相比埃氏筛法,

欧拉筛法中,如果当前数的质数,那么删掉已记录的所有已知质数,直到自己

如果不是质数,那么一直删到自己的最小质因数,比如4,只要2即可;9时,乘2要删一次,乘3要删一次,之后就停止了

也就是说,对于每个数,都是一直删,直到乘数是它的最小质因数

质数的最小质因数是其自身。

折半查找

int bs(s l,int key){int low=0,high=l.lengh-1,mind;while(low<=high){mid=(low+high)/2;if(l.data[mid]==key){return mid;}else if(l.data[mid]>key){high=mid-1;}else{low=mid+1;}}
return -1;}

查找终止的条件是左区间大于右区间

插值查找 

中间值可以表述为

左边意思是区间的中点;右边意思是,左端点加上区间长度的一半;

可改为

mid=low+(key-l.data[low])/(l.data[high]-l.data[low])*(high-low);

这个key就是要查找的值,low是此时区间里最小的值 

斐波那契查找

int search(int *a,int n, int key){int low,high,mid,i,k;low=0,high=n,k=0;

 

 

 

这篇关于11.20顺序表查找,质数查找,折半查找,任意折查找的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/400708

相关文章

SpringBoot中配置文件的加载顺序解读

《SpringBoot中配置文件的加载顺序解读》:本文主要介绍SpringBoot中配置文件的加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot配置文件的加载顺序1、命令⾏参数2、Java系统属性3、操作系统环境变量5、项目【外部】的ap

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹