文档章节

Python vs PHP 冒泡排序和累加求和计算性能测试

eechen
 eechen
发布于 2015/04/25 16:31
字数 586
阅读 3879
收藏 12
点赞 2
评论 18
测试环境: 处理器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

eechen

粉丝 975
博文 107
码字总数 55962
作品 1
深圳
加载中

评论(18)

taloo2012
taloo2012
你会py?
sunday12345
sunday12345
这种写法,真的是不懂py的吧,写的跟php一样。。。
NILYANG
NILYANG
python .... 慢
梁选
梁选
鄙视,这年头还用python做循环,不会用c啊
aabbccli
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是世界上最好的语言,函数的内部实现有可能是快排,你说快排和冒泡有啥可比性
inuxor
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又不是没有排序函数。
l
liwenhui
等你精通了PHP和Python两者,再来做测试。半吊子的测试没有参考价值,反而显得很肤浅。
eechen
eechen

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

https://github.com/nryoung/algorithms/blob/master/algorithms/sorting/bubble_sort.py 可以看下这个实现(Python3版):区别在于Python交换 的处理方式。可能还是会比php慢点。可以再测试一下数据也好有个参考。
我的本意主要是运行相同的代码,两个语言花费的时间,所以这里关注的不应该是算法的优化问题.
chenwenli
chenwenli

引用来自“xsm”的评论

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

引用来自“eechen”的评论

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

Python 是个比较成熟的语言,运行速度在几年前是快于 JavaScript 的。但这些年 JavaScript 的解释器发展很快,特别是 Google 的 V8 和 Mozilla 的 SpiderMonkey, 将 JavaScript 的运行速度提...

开心303
2012/03/20
0
0
C、go、python、java、php和node.js 简单循环累加运算速度测试[测试demo仅供参考]

之前简单做了一下node.js和python的“hello ***”的页面测试,也做了循环的测试,本次主要是增加了java的语言,go语言。主要是想看一下主流四种脚本的速度java、python、php、c语言。均使用f...

dragon_tech
2017/11/08
0
0
笨办法学 Python · 续 练习 19:改善性能

练习 19:改善性能 原文:Exercise 19: Improving Performance 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 这几乎完全是视频练习,其中我演示了如何改进你至今为止编写的代码的性...

apachecn_飞龙
2017/08/09
0
0
【DL笔记2】神经网络编程原则&Logistic Regression的算法解析

本文是【专题“DeepLearning学习笔记”】的第【2】篇 上一篇:【DL笔记1】Logistic回归:最基本的神经网络 一、神经网络中的编程指导原则 就一句话: 只要阔能,就不要使用显示for循环(exp...

Stack_empty
07/03
0
0
Python是如何怼翻其他编程语言而窜上宝座的

来PK啊! 谁怕谁啊! 在过去的两年间,Python一路高歌猛进,成功窜上“最火编程语言”的宝座。 更可怕的是,这把火不仅仅是在程序员的圈子里越烧越旺,甚至还烧到了程序员的圈子外,从小学生...

超级数学建模
04/18
0
0
验证 - Golang performance vs python vs .net C#

周末看到一篇文章,对golang python c#做了简单的性能测试,基于文章示例,我验证了下过程和结论,原文在如下地址: http://blog.163.com/back-kc/blog/static/60657320114252541156/ 在文章...

dijin
2013/07/15
0
2
[雪峰磁针石博客]python数据分析快速入门教程2-pandas数据结构

Title: python数据分析快速入门教程2-pandas数据结构 Date: 2018-03-31 9:20 Category: 数据分析 Slug: pythonpandascrash_tutorial2 [雪峰磁针石博客]python数据分析快速入门教程1-开胃菜 ...

Python测试开发人工智能
07/10
0
0
数据科学领域,你该选 Python 还是 R ?

根据需求,为了那些希望知道在数据科学方面选择 Python 还是 R 编程语言的人,我发布了这篇指导文章。你可能在数据科学方面是个新手,或者你需要在一个项目中选出一个语言,这篇文章可能会帮...

oschina
07/09
0
0
笨办法学 Python · 续 练习 16:冒泡、快速和归并排序

练习 16:冒泡、快速和归并排序 原文:Exercise 16: Bubble, Quick, and Merge Sort 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你现在将尝试为你的数据结构实现排序算法。对于这...

apachecn_飞龙
2017/08/07
0
0
选择PHP与Python,可以考虑这三个问题

导读 尽管 RESTful API 和跨平台库已经使网页开发容易起来,但依然没有解决阻碍并隔分开发者、管理者和消费者的由来已久的问题:PHP vs. Python,到底该选哪种语言? 2017年可谓是网页应用与...

问题终结者
06/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

数据库事务的四大特性以及事务的隔离级别

本篇讲述数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别。 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是...

Java大蜗牛
13分钟前
0
0
Spring Boot 整合 MyBatis/通用Mapper/PageHelper分页插件

整合MyBatis 整合通用Mapper 1. POM依赖配置 <properties><mapper.starter.version>2.0.3-beta1</mapper.starter.version></properties><!-- 通用Mapper --><dependency><groupId>t......

OSC_fly
22分钟前
0
0
CentOS7 双网卡绑定

环境 操作系统 CentOS7.5,禁用 NetworkManager 服务 网卡 eth0 网卡 eth1 绑定网卡 bond0 网卡 eth0 配置 修改 /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=EthernetBOOTPROTO=noneD......

Colben
23分钟前
0
0
zk实战--rpc框架集群化

在看此篇内容时需要浏览下面内容 netty实战--手写rpc框架 前文功能简介以及功能扩充 利用netty来实现一个点对点的rpc调用。客户端和服务端都是靠手写地址进行socket同学的,无法1对多,也无法...

xpbob
40分钟前
11
0
springboot 发送邮件

获取授权码 添加配置 # 账号和密码spring.mail.username=aaa@qq.comspring.mail.password=bbb# 服务器地址spring.mail.host=smtp.qq.comspring.mail.properties.mail.smtp.ssl.en...

阿豪boy
40分钟前
0
0
如何使用GNU Ring?

文章名:如何使用GNU Ring? 作者:冰焰火灵X 1079092922@qq.com 文章许可:CC BY-SA 4.0 ##1. 安装 下载GNU Ring 点击左边选择你的系统版本(这里以 GNU/Linux 为例,我使用的是Mint 18.3)...

ICE冰焰火灵X
43分钟前
4
0
深入理解springMVC

什么是spring MVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而...

Java填坑之路
48分钟前
1
0
《射雕英雄传》书摘

1. 我虽是个飘泊江湖的贫家女子,可不是低三下四、不知自爱之人。你如真心爱我,须当敬我重我。我此生决无别念,就是钢刀架颈,也决意跟定了你。将来……将来如有洞房花烛之日,自然……自能...

k91191
59分钟前
1
0
解决:modal中datePicker 选中时,会触发modal的hidden.bs.modal事件

最近项目中发现了一个bug,具体表现为选中模态框上datepicker组件上的日期时,会触发模态框的关闭事件,导致数据编辑无法正常进行。网上搜索了下,解决方法如下: $('.datepicker').on('hid...

Funcy1122
今天
0
0
Redis分布式锁的正确实现方式

前言 分布式锁一般有三种实现方式: 1.数据库乐观锁 2.基于Redis的分布式锁; 3.基于Zookeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis...

大海201506
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部