Python vs PHP 冒泡排序和累加求和计算性能测试
博客专区 > eechen 的博客 > 博客详情
Python vs PHP 冒泡排序和累加求和计算性能测试
eechen 发表于3年前
Python vs PHP 冒泡排序和累加求和计算性能测试
  • 发表于 3年前
  • 阅读 3752
  • 收藏 12
  • 点赞 2
  • 评论 18

腾讯云 技术升级10大核心产品年终让利>>>   

测试环境: 处理器i5-3230M,64位Ubuntu 14.04
Python 2.7.6, PHP 5.4.39, PHP 7.0.0-dev(2015/04/21)

测试内容:
冒泡排序:对10个升序的数进行排序,降序输出,循环1百万次.
累加求和:0+1+2+3+...+99999999

冒泡排序测试结果对比:
程序: Python   PHP5       PHP7
耗时: 16.910s  14.715s  8.011s
内存: 35.8m    9.0m       12.5m
Python改用xrange后,内存占用为4.8MB,耗时为16.784s.

累加求和测试结果对比:
程序: Python   PHP5      PHP7
耗时: 10.057s  3.855s  1.855s
内存: 3.039g   8.9m      12.5m
使用range时,Python内存占用达到3GB,改为xrange后,内存占用为4.8MB,耗时为9.460s.

结论:
Python和PHP都是动态脚本语言,都没有JIT机制,所以测试是公平的.
Python计算性能根本比不上PHP5,跟PHP7差距更大,所以就别黑PHP计算不如Python了.
PHP是 自己编译的 ,启用了很多内建的功能,所以测试中内存占用会比Python多一些.

下面是详细测试过程:

Python冒泡排序:
def bubble_sort(lst):
    length = len(lst)
    for i in range(0, length, 1):
        for j in range(0, length-1, 1):
            if lst[j] < lst[j+1]:
                temp = lst[j]
                lst[j] = lst[j+1]
                lst[j+1] = temp
    return lst
for c in range(1000000):
    lst = [0,1,2,3,4,5,6,7,8,9]
    lst = bubble_sort(lst)
print(lst)
测试: time python BubbleSort.py
耗时: 0m16.910s
内存: 35.8m



Python累加求和:
sum = 0
for i in range(100000000):
    sum += i
print(sum)
测试: time python sum.py
耗时: 0m10.057s
内存: 3.039g



PHP冒泡排序:
<?php
function bubble_sort($array) {
    $size = count($array);
    for ($i=0;$i<$size;$i++) {
        for ($j=0;$j<$size-1;$j++) {
            if ($array[$j] < $array[$j+1]) {
                $temp = $array[$j];
                $array[$j] = $array[$j+1];
                $array[$j+1] = $temp;
            }
        }
    }
    return $array;
}
for ($c=0;$c<1000000;$c++) {
    $array = array(0,1,2,3,4,5,6,7,8,9);
    $array = bubble_sort($array);
}
print_r($array);
测试: time php BubbleSort.php
耗时: 0m14.715s
内存: 9.0m
测试: time phpng BubbleSort.php
耗时: 0m8.011s
内存: 12.5m




PHP累加求和:
<?php
$sum = 0;
for($i=0;$i<100000000;$i++)
    $sum += $i;
print_r($sum);
测试: time php sum.php
耗时: 0m3.855s
内存: 8.9m
测试: time phpng sum.php
耗时: 0m1.855s
内存: 12.5m




更正:
虽然文中的算法也能排序,但做了一些无用功.
文中的冒泡排序算法不正确,第二层循环应该是 for ($j=0;$j< $size-1-$i;$j++) .
function bubble_sort($array) {
    $size = count($array);
    for ($i=0;$i<$size;$i++) {
        for ($j=0;$j<$size-1-$i;$j++) {
            if ($array[$j] < $array[$j+1]) {
                $temp = $array[$j];
                $array[$j] = $array[$j+1];
                $array[$j+1] = $temp;
            }
        }
    }
    return $array;
}
冒泡排序参考:
http://en.wikibooks.org/wiki/Algorithm_Implementation/Sorting/Bubble_sort#PHP
共有 人打赏支持
eechen
粉丝 928
博文 106
码字总数 55593
作品 1
评论 (18)
firebroo
然而呢,我依然要黑,因为你用的是range,你根本不懂python,就拿来和php瞎的一比较。看看我的分析
http://my.oschina.net/firebroo/blog/406286
firebroo
不信你试试把PHP的$i++改成++$i可以更快哦
壮士
再试一下:

1. 排序:
lst = [0,1,2,3,4,5,6,7,8,9]
for i in xrange(1000000):
sorted(lst, reverse=True)
-------------------------
real 0m1.033s
user 0m0.996s
sys 0m0.036s

2. 累加
print sum(xrange(100000000))
-------------
real 0m0.926s
user 0m0.916s
sys 0m0.010s

为什么老喜欢让别人碾压你的智商。
eechen

引用来自“壮士”的评论

再试一下:

1. 排序:
lst = [0,1,2,3,4,5,6,7,8,9]
for i in xrange(1000000):
sorted(lst, reverse=True)
-------------------------
real 0m1.033s
user 0m0.996s
sys 0m0.036s

2. 累加
print sum(xrange(100000000))
-------------
real 0m0.926s
user 0m0.916s
sys 0m0.010s

为什么老喜欢让别人碾压你的智商。
PHP同样有rsort降序排序和array_sum数组求和函数,但现在不是比调用函数,而是比执行同样的语句,两者的耗时对比.
eechen

引用来自“firebroo”的评论

然而呢,我依然要黑,因为你用的是range,你根本不懂python,就拿来和php瞎的一比较。看看我的分析
http://my.oschina.net/firebroo/blog/406286
使用xrange的测试结果也添加进去了,Python的内存占用降下去了,但执行时间变化不大,依旧跟PHP有差距.
ytesgdsga
php是世界上最好的。。。。。。
eechen

引用来自“xsm”的评论

php是世界上最好的。。。。。。
之前看到有人说计算上PHP跟Python不是一个数量级的,说PHP比Python慢很多,所以我才自己测试下看是不是真的,结果发现是忽悠人的,反而是PHP更快.我这种实事求是的精神不错吧.
摇篮曲143
https://github.com/nryoung/algorithms/blob/master/algorithms/sorting/bubble_sort.py 可以看下这个实现(Python3版):区别在于Python交换 的处理方式。可能还是会比php慢点。可以再测试一下数据也好有个参考。
chenwenli

引用来自“xsm”的评论

php是世界上最好的。。。。。。

引用来自“eechen”的评论

之前看到有人说计算上PHP跟Python不是一个数量级的,说PHP比Python慢很多,所以我才自己测试下看是不是真的,结果发现是忽悠人的,反而是PHP更快.我这种实事求是的精神不错吧.
你这个人虽说饱受争议,但是肯定是个有趣的伙伴~
eechen

引用来自“摇篮曲143”的评论

https://github.com/nryoung/algorithms/blob/master/algorithms/sorting/bubble_sort.py 可以看下这个实现(Python3版):区别在于Python交换 的处理方式。可能还是会比php慢点。可以再测试一下数据也好有个参考。
我的本意主要是运行相同的代码,两个语言花费的时间,所以这里关注的不应该是算法的优化问题.
liwenhui
等你精通了PHP和Python两者,再来做测试。半吊子的测试没有参考价值,反而显得很肤浅。
inuxor

引用来自“壮士”的评论

再试一下:

1. 排序:
lst = [0,1,2,3,4,5,6,7,8,9]
for i in xrange(1000000):
sorted(lst, reverse=True)
-------------------------
real 0m1.033s
user 0m0.996s
sys 0m0.036s

2. 累加
print sum(xrange(100000000))
-------------
real 0m0.926s
user 0m0.916s
sys 0m0.010s

为什么老喜欢让别人碾压你的智商。
你这属于耍赖了,直接用函数那还比个毛啊。php又不是没有排序函数。
aabbccli

引用来自“壮士”的评论

再试一下:

1. 排序:
lst = [0,1,2,3,4,5,6,7,8,9]
for i in xrange(1000000):
sorted(lst, reverse=True)
-------------------------
real 0m1.033s
user 0m0.996s
sys 0m0.036s

2. 累加
print sum(xrange(100000000))
-------------
real 0m0.926s
user 0m0.916s
sys 0m0.010s

为什么老喜欢让别人碾压你的智商。

引用来自“inuxor”的评论

你这属于耍赖了,直接用函数那还比个毛啊。php又不是没有排序函数。
+1 PHP是世界上最好的语言,函数的内部实现有可能是快排,你说快排和冒泡有啥可比性
梁选
鄙视,这年头还用python做循环,不会用c啊
NILYANG
python .... 慢
sunday12345
这种写法,真的是不懂py的吧,写的跟php一样。。。
taloo2012
你会py?
×
eechen
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: