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;… Read More

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

最近在研究发红包的功能,于是写了个红包的生成算法。   红包生成算法的需求 预先生成所有的红包还是一个请求随机生成一个红包 简单来说,就是把一个大整数m分解(直接以“分为单位,如1元即100)分解成n个小整数的过程,小整数的范围是[min, max]。 最简单的思路,先保底,每个小红包保证有min,然后每个请求都随机生成一个0到(max-min)范围的整数,再加上min就是红包的钱数。 这个算法虽然简单,但是有一个弊端:最后生成的红包可能都是min钱数的。也就是说可能最后的红包都是0.01元的。   另一种方式是预先生成所有红包,这样就比较容易控制了。我选择的是预先生成所有的红包。 理想的红包… Read More

微信红包的算法实现探讨(基于PHP)

今晚突发奇想给校友微信群发了红包,我设定红包总额为10元,支持28个人随机领取。 于是一个有趣的结果出现了: A 领取了 0.26元 B 领取了 0.29元 C 领取了 0.02元 D 领取了 0.56元 E 领取了 0.64元 …… 微信是采用什么样的算法做到的?简单百度了下,目前尚未有官方的说明,仅仅在知乎里有一个较为热门的讨论,链接戳这里,不过他们讨论的太过于深入,有掉坑之嫌。 我按照自己的逻辑尝试了下,这个算法需要满足以下几点要求: 1、每个人都要能够领取到红包; 2、每个人领取到的红包金额总和=总金额; 3、每个人领取到的红包金额不等,但也不能差的太离谱,不然就没趣味; 4、算法一定要简单,不然对不起腾讯这个招牌; 正式编码之前,… Read More