抽签算法的基本思想
抽签是中国的民间习俗,是占卜的其中一种形式。那么可以抽签的形式随机找出序列中的元素进行比对,如果运气足够好,那么不管多少元素,都只需要比对一次,这就是这个算法最神秘之处,用阳寿来查找。
步骤
过程演示
在序列[3,44,38,5,47,15,36,26,1,2] 中查找 2
第一种结果:查找 1 次
第二种结果:查找 18 次
第三种结果:查找 3 次
算法代码
#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; }
算法性能分析