事情的起因是我的一个回答:

里面的大佬提供了一个快排算法

def 快排(a):

return a and 快排([i for i in a if ia[0]])

一行代码写的十分优雅。

于是我写了如下代码进行对比

import time

import numpy as np

from random import random

from astartool.number import equals_zero_all

npa = np.array

def qsort1(a: list):

"""

知乎网友 划船協會 主页地址 https://www.zhihu.com/people/hua-chuan-xie-hui/activities

提供思路,感谢分享

:param a:

:return:

"""

return a and qsort1([i for i in a if i < a[0]]) + [i for i in a if i == a[0]] + qsort1([i for i in a if i > a[0]])

def qsort2(a: list):

"""

我的代码--快排

利用栈实现的快速排序(非递归算法)

:param a:

:return:

"""

stack = [(0, len(a) - 1)]

while stack:

ind, end = stack.pop()

i, j = ind, end

key = a[ind]

while i < j:

while j > i and key <= a[j]:

j -= 1

if j <= i:

break

a[i], a[j] = a[j], a[i]

i += 1

while j > i and key >= a[i]:

i += 1

if j <= i:

break

a[i], a[j] = a[j], a[i]

j -= 1

if ind < i - 1:

stack.append((ind, i - 1))

if i + 1 < end:

stack.append((i + 1, end))

return a

def equals(a, b):

"""

判断a和b是否相等

:param a:

:param b:

:return:

"""

return equals_zero_all(npa(a)-npa(b), 1e-12)

def my_test(l: int):

"""

测试函数

:param l: 数据规模

:return: 知乎网友划船協會提供在代码时间, 我自己写在代码在时间, list.sort时间, sorted的时间

"""

a = [random() for _ in range(l)]

b = a.copy()

c = a.copy()

d = a.copy()

e = a.copy()

# print(a)

t1 = time.clock()

sb = qsort1(b)

t2 = time.clock()

sc = qsort2(c)

t3 = time.clock()

d.sort()

t4 = time.clock()

se = sorted(e)

t5 = time.clock()

# print(t2 - t1, sb)

# print(t3 - t2, sc)

assert equals(sb, sc)

assert equals(sb, d)

assert equals(sb, se)

return t2 - t1, t3 - t2, t4 - t3, t5 - t4

x = [100, 500, 1000, 10000, 100000, 1000000]

for l in x:

t = my_test(l)

print(t)

运行结果为

(0.0020383999999999958, 0.0013799859999998887, 0.00014368300000011658, 0.0001452620000002014)

(0.021408730000000098, 0.0213862309999997, 0.0001646029999999854, 0.0001693410000003226)

(0.017994686000000204, 0.011673828999999802, 0.000404205999999796, 0.0004993370000003772)

(0.19425908400000003, 0.14128751600000022, 0.005214815999999622, 0.004091406000000131)

(2.6890752549999997, 1.9520561440000002, 0.07384543600000004, 0.08302494800000026)

(36.369763621999994, 22.788260172, 1.0100625289999954, 0.9511514160000019)

以上元祖每组分别是随机100、500、1000、10000、100000、1000000个随机数进行排序所需要的时间。

每个元祖分别代表 知乎网友划船協會提供在代码(以后简写成代码1)时间, 我自己写在代码(以后简写成代码2)在时间, list.sort(以后简称成代码3)时间, sorted(以后简写成代码4)的时间

看起来, 虽然代码1简练优雅,但是实际上缺乏执行效率。代码2代码虽然冗长,但是执行效率稍微高一点。系统函数代码3和代码4效率相差不明显,但是明显优于代码1和代码2。

那么为什么代码1会稍微慢一些呢?

我认为主要在以下的方面代码1在递归的过程中不断生成新的列表,递归耗时和列表生成存在耗时(不仅耗时,而且耗空间)

代码每一趟的计算上,代码2扫1遍列表得到的两部分。而代码1是扫了3遍表并且把表分成了3部分。又因为随机数的原因,导致代码1中的第二部分元素等于a[0]的列表元素个数基本上会等于1。三部分的列表还是相当于把元素分成两部分。

不过呢,比较之后,也给了我们一些启示尽量使用自带的工具。能不造轮子就不造轮子。(自己手撸执行效率又低,还浪费时间)

简练的东西执行效率不一定高。

不过嘛,个人喜好而言,虽然执行效率不高,我还是更加喜欢代码1,符合简单即美的python哲学。关键问题还是--这种写法实在太秀了。

python编码效率高吗_【原创】杠精的日常-讨论python快排的效率相关推荐

  1. python go高并发_天下武功为快不破,戏说Python与Go高并发争锋!

    在这个以斗气大陆横行的世界,每一个大的势力宗门都有自己的杀手锏的功法,比如老牌的古族有C++这样的巨无霸语言,药族有C语言,几乎斗气大陆所有的操作系统都是用C语言做的,毕竟斗气都要靠吃丹药维持.而实力 ...

  2. python为什么是蛇_【大蟒蛇】简谈Python的闭包【原创】

    我们知道在Python中一切皆对象,包括函数也是一样,函数名可以赋值给一个变量,也可以当作一个参数传递给另外一个函数的形参,当然也可以将函数名作为另外一个函数的返回值使用,总之函数的使用可以非常的灵活 ...

  3. python 进程生命周期_计算客户生命周期价值的python解决方案

    python 进程生命周期 By Lisa Cohen, Zhining Deng, Shijing Fang, and Ron Sielinski 由丽莎·科恩,志宁邓,石井方和罗恩Sielinsk ...

  4. python国内书籍推荐_久等了,你要的 Python 书籍推荐,来了!

    前言 时不时有小伙伴私信问我有什么好一些的 Python 书籍推荐,想要学习学习. 那么今天就来给大伙说道说道,我会划分为以下几个分类,让不同阶段的朋友可以根据自身的情况,选择适合自己当下学习的 Py ...

  5. python批量命名教程_《自拍教程69》Python 批量重命名音频文件,AV专家必备!

    本篇主要学习如何Python自定义模块并调用该模块,并重点介绍Python正则表达式的强大的文本处理能力. 案例故事:任何一款终端产品只要涉及音频输出,就肯定涉及音频的解码, 作为一名专业的AV (A ...

  6. python查看数据大小_科多大数据带你看Python可以列为最值得学习的编程语言

    原标题:科多大数据带你看Python可以列为最值得学习的编程语言 不知道从什么时候开始,这句话开始流行.不过也从侧面反映出 Python 语言的特点:简单.高效. 从近期代表技术趋势的业界报告以及编程 ...

  7. python基本词汇的特点_开课吧老师为你讲解 Python都有什么优点?

    前两天刷微博的时候看到了一篇非常励志的新闻,给大家分享一下.最近北京大学举办了一场"争做数一数二的保安员"评选会,20名来自各岗位的保安员进行了现场汇报.其中,保安小哥许文龙考上本 ...

  8. python积木编程软件_童心制物慧编程全新 Python 编辑器正式上线

    原标题:童心制物慧编程全新 Python 编辑器正式上线 作为一款致力于 提供更专业.更多样的STEAM教育解决方案的编程软件,童心制物慧编程一直不断在优化慧编程的教学功能,只为了给所有编程教育者提供 ...

  9. 吃鸡是python写的吗_吃鸡游戏也是用Python写的?学了Python,120个月年终奖向你招手~...

    原标题:吃鸡游戏也是用Python写的?学了Python,120个月年终奖向你招手~ 吃鸡游戏火爆全球,已经把腾讯的<王者荣耀>都比下去了,有传言,腾讯给"王者荣耀"开 ...

最新文章

  1. mongodb重命名集合、数据库
  2. ESX中的Linux热添加磁盘
  3. mysql数据库支持的锁粒度包括_1. Mysql的并发(锁策略、锁粒度、事务)
  4. 认识Backbone (四)
  5. Java开发语句和代码块模板
  6. ubuntu下硬盘相关
  7. C++之TR1::function
  8. python基础知识-8-三元和一行代码(推导式)
  9. dom contains 包含关系
  10. 华为pap和chap的配置。
  11. Mybatis MySQL批量更新
  12. mysql8和php7不能连接_php无法连接mysql8.x
  13. C++ linux系统api
  14. 相机成像原理RAW,RGB,YUV
  15. 迭代法动态生成谢尔宾斯基三角形
  16. jsp医疗报销管理系统 myeclipse开发技术 mysql数据库
  17. 使用MIPS完成汇编程序——选择排序实现
  18. 原生小程序实现手风琴
  19. 零基础python爬虫基础之王者荣耀图片下载(超级简单)
  20. 实验五 java gui(预习报告)

热门文章

  1. SAP UI5 ODataWrapper
  2. manually set focus for tag library
  3. How is account image maintained in CRM rendered in Fiori
  4. 把日志文件从Linux服务器拷贝到Windows上
  5. WebSocket客户端连接成功后,返回的socket里有用的字段
  6. SAP CRM HANA report filter的工作原理
  7. 使用VM Tools让VMware虚拟机里的ubuntu能够共享Windows系统的文件夹
  8. SAP CRM和C4C的客户主数据修改历史记录查询
  9. python大数据运维库_大数据集群运维(10)Pycharm下安装模块
  10. geoserver 3_SD 2-3/15 PR调速阀德国HAWE哈威