• 快速排序(Quicksort)探微 之 大牛


    “排序”在电脑中,是一个非常基础的问题。正因为她非常的基础,因此几乎所有的程序都会或多或少地运用到“对数据进行排序”这种操作。也正因为如此,如果我们能够有效地提高电脑对数据进行“排序”的效率,哪怕只是一点点,那么对于提升整个系统的工作性能都是有重大意义的。

    电脑中的排序,一般分为两种:内排序,对已存在于内存中的数据进行排序;外排序,对外存(磁盘/U盘/光盘)中的数据进行排序。

    内排序,似乎更为常见。

    为了提高电脑内排序的效率,许多前辈高人提出了各种各样的操作策略(算法),将他们的智慧如同夜空中的星辰般璀璨地展现在我们的面前

    其中,排序速度最快、效率最高的一种排序方式,就是“快速排序”(QuickSort)(在后继的文章中,我们将用实测数据来证明:丫实在是快极了!)

    这次的文章,我们先来介绍一下“快速排序”的发明者,大牛:Sir Charles Antony Richard Hoare,他更多的时候,被人们称作Tony Hoare,或是C. A. R. Hoare

    (下面内容的介绍,来自英文Wikipedia的翻译和其他网络资源)

    http://en.wikipedia.org/wiki/Tony_Hoare

    这是2011年6月20日,Hoare在参加瑞士联邦技术研究院的EPFL的一次会议。

    Hoare于1934年1月11日生于英国(现年77岁高龄了,谁说程序员是吃青春饭的?)他在1956年就拿到了牛津大学的学士学位,专业是古典研究(Bachelor's degree in Classics)。这个专业那是相当的特别哦!怎么看也不像是会搞电脑的呢。但是不要紧,牛津毕竟是牛津,大牛就是大牛,随便搞个项目都能出名堂。不像如今的大学毕业生,据说计算机专业的学生面试的时候写个排序都能难倒一大片。Hoare先生摆在今天,那就是典型的跨学科发展呢!
    大学毕业后,Hoare先是留在牛津,又学了一年统计学的研究生课程,然后参加了皇家海军,一干就是两年(1956~1958)。看来Hoare还是位爱国青年。再后来,他又去了苏联,在莫斯科州立大学学习人类语言的电脑翻译技术。快速排序算法,就是在这段时间被他发明出来的。
    Hoare在苏联的学习时间也不算特别长,到了1960,他就离开了苏联,开始为一家名为Elliott Brothers的公司工作,在那里,他实现了ALGOL 60,这是一种程序设计语言,并开始设计主要的算法。顺便说一句,ALGOL语言的出现,最终引发了Pascal、C等语言的诞生。
    干了几年后,Hoare于1968年又回到了学校,在贝尔法斯特的女王大学担任教授。最终,他又于1977年回到了牛津,担任计算机教授,并领导牛精大学计算实验室的程序研究组,顶替去世的Christopher Strachey。
    如今,Hoare是牛津的名誉教授(Emeritus Professor),同时还是剑桥微软研究院的首席研究员。
    Hoare最显赫的业绩在如下领域:排序算法(快速排序)、Hoare逻辑、正则语言、通信序列处理等……
    1982年,Hoare被选为英国皇家学会院士。

    牛人轶事:

    “在97%的情况下,过早的优化是万恶之源,因此我们应当忘记那些微小的效率问题。”

    这句话许多程序员都听过。它是由于Donald Knuth在文章中的引用而广为人知,Knuth以为这话是Hoare说的,但Hoare否认了这点,并指出原话应该是出自Edsger Dijkstra。
    编程语言中的“空指针”,源自Hoare在ALGOL W语言中的发明。2009年的时候,Hoare在一个会议上为此道歉,原因是空指针特性引发了很多程序设计中的错误和漏洞。我个人倒是因此而觉得Hoare颇有大家风范:原本是其他程序员没有足够的技巧掌握空指针的特性,Hoare却把责任揽到自己身上,认为是自己设计的编程语言不够完善,因此而道歉。对比起新闻上那些众所周知的原因调查、责任追究报道,不禁让人感叹“人和人之间的差别,咋就这么大呢?”
    最后,用一个Hoare的名言来结束本文,这句话也是我所推崇备至的:

    有两种设计软件的方法:第一,设计简单到明显没有缺陷的软件;第二,设计复杂到看不出明显缺陷的软件。第一种方法,尤为困难。

    下一篇,快速排序 之 算法,敬请期待……

  • 相关阅读:
    【转载】C#中List集合使用Contains方法判断是否包含某个对象
    【转载】C#中List集合使用Clear方法清空集合
    【转载】C#中List集合使用AddRange方法将一个集合加入到指定集合末尾
    【转载】C#中List集合使用Min()方法查找到最小值
    【转载】 C#中List集合使用OrderByDescending方法对集合进行倒序排序
    Mysql,ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
    Android -- MeasureSpec
    Android -- PullToRefresh应用
    Android -- Gradle
    Android -- ShortCut
  • 原文地址:https://www.cnblogs.com/fzd19zx/p/2119971.html
Copyright © 2020-2023  润新知