查找算法——抽签算法(假如我告诉你:不管多少元素,都只需要比对一次,你信还是不信?)

简介: 查找算法——抽签算法(假如我告诉你:不管多少元素,都只需要比对一次,你信还是不信?)

2199d95f19b94e6a8ca147d44897f63a.png

抽签算法的基本思想

抽签是中国的民间习俗,是占卜的其中一种形式。那么可以抽签的形式随机找出序列中的元素进行比对,如果运气足够好,那么不管多少元素,都只需要比对一次,这就是这个算法最神秘之处,用阳寿来查找。

步骤image.png

过程演示

在序列[3,44,38,5,47,15,36,26,1,2] 中查找 2

第一种结果:查找 1 次5f6cd4ded3819aaf9a59bd3e946313d3.png

第二种结果:查找 18 次5e3af585a92b9968214c8b97abf3d7dc.png

第三种结果:查找 3 次08ee3ac8b4418f37e0ac3a359c8f749f.png


算法代码

#include<iostream>#include<cstdlib>#include<ctime>usingnamespacestd;
//抽签算法 voidDrawAlgorithm(intnums[],intnum,intn){
srand((int)time(0));                //产生随机种子 intcount=0,randNum,bound=n*n;      
while(true&&count<bound){           //当寻找次数到达 bound 时停止 count++;
randNum=rand()%n;               //生成随机数 if(nums[randNum]==num){         
break;                      //如果找到 num,则 break 退出循环         }
    }
cout<<"已找到 "<<num<<",寻找次数 count:"<<count;
} 
//打印数组 voidprintNum(intnumbers[],intn){
for(inti=0;i<n;i++){
cout<<numbers[i]<<" ";
    }
cout<<endl; 
}
intmain()
{
intnumbers[10]={3,44,38,5,47,15,36,26,1,2};
intn=sizeof(numbers)/sizeof(numbers[0]);   //数组长度 cout<<"序列为:"; 
printNum(numbers,n);        //打印数组 DrawAlgorithm(numbers,2,n);     //调用 DrawAlgorithm 函数在 numbers 序列中进行抽签查找 2 return0;
}

算法性能分析image.png


目录
相关文章
|
2月前
|
算法 Java
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
32 1
|
27天前
|
算法
数据结构和算法学习记录——习题-移除链表元素
数据结构和算法学习记录——习题-移除链表元素
14 0
|
12天前
|
存储 算法 Java
Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。
【6月更文挑战第21天】Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。简单哈希表实现未涵盖冲突解决和删除操作。
16 1
|
20天前
|
算法
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
|
26天前
|
算法 Java
JavaSE——算法(2/2):查找算法-二分查找(前言、详细图解、代码部分)
JavaSE——算法(2/2):查找算法-二分查找(前言、详细图解、代码部分)
34 2
|
28天前
|
算法 搜索推荐 Java
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
16 3
|
8天前
|
算法
【数据结构与算法 刷题系列】移除链表元素
【数据结构与算法 刷题系列】移除链表元素
|
27天前
|
算法
数据结构和算法学习记录——认识二叉搜索树及二叉搜索树的查找操作(递归以及迭代实现-查找操作、查找最大和最小元素)
数据结构和算法学习记录——认识二叉搜索树及二叉搜索树的查找操作(递归以及迭代实现-查找操作、查找最大和最小元素)
16 0
|
27天前
|
算法 C语言
数据结构和算法学习记录——特殊线性表之栈(下)-销毁栈函数、判断栈是否为空、压栈函数、出栈函数、取栈顶元素、计算栈中有多少个元素、栈有关习题-有效的括号
数据结构和算法学习记录——特殊线性表之栈(下)-销毁栈函数、判断栈是否为空、压栈函数、出栈函数、取栈顶元素、计算栈中有多少个元素、栈有关习题-有效的括号
14 0
|
27天前
|
算法
数据结构和算法学习记录——习题-移除元素
数据结构和算法学习记录——习题-移除元素
15 0