C,是一种信仰

快速排序(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的名言来结束本文,这句话也是我所推崇备至的:

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

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

posted @ 2011-07-28 21:31  胖乎乎的王老师  Views(650)  Comments(0Edit  收藏  举报
Email 联系我:fzd19zx@qq.com