Day: May 1, 2015

PHP 四种基本排序算法的代码实现

这里介绍冒泡排序,插入排序,选择排序,快速排序四种基本算法,分析一下算法的思路。 前提:分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序。 array(1,43,54,62,21,66,32,78,36,76,39); 1. 冒泡排序 思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。 function bubbleSort($arr) { $len = count($arr); // 该层循环控制 需要冒泡的轮数 for ($i=1; $i… Read More

微信红包随机生成算法(PHP版)

最近在研究发红包的功能,于是写了个红包的生成算法。   红包生成算法的需求 预先生成所有的红包还是一个请求随机生成一个红包 简单来说,就是把一个大整数m分解(直接以“分为单位,如1元即100)分解成n个小整数的过程,小整数的范围是[min, max]。 最简单的思路,先保底,每个小红包保证有min,然后每个请求都随机生成一个0到(max-min)范围的整数,再加上min就是红包的钱数。 这个算法虽然简单,但是有一个弊端:最后生成的红包可能都是min钱数的。也就是说可能最后的红包都是0.01元的。   另一种方式是预先生成所有红包,这样就比较容易控制了。我选择的是预先生成所有的红包。 理想的红包生成算法 理想的红包生成结果是平均值附近的红包比较多,大红包和小红包的数量比较少。 可以想像下,生成红包的数量的分布有点像正态分布。   那么如何实现这种平均线附近值比较多的要求呢? 就是要找到一种算法,可以提高平均值附近的概率。那么利用一种”膨胀“再”收缩“的方式来达到这种效果。 先平方,再生成平方范围内的随机数,再开方,那么概率就不再是平均的了。 具体算法:(设置的总钱数,总人数,最大值,最小值要合理)… Read More