《快速排序》引发关于算法的讨论

昨天笔者写了一篇帖子:

c#实现最简快速排序,你绝对可以看懂

 

有多个同学共同提到一个问题,实现算法的过程中,你的内存消耗太大,所以算法没有任何意义。所以我单独开一个帖子,对这个质疑进行解释

 

 

  首先我本人软件从业5年,学校里面主修c和c++,毕业后先后接触和使用的语言有c#,java,python,以及一系列的前端脚本语言(js、jq)等。不能说自己现在的能力有多么强,但是基本可以应付目前的开发任务。我个人资质平平,虽然喜欢研究技术,但是自己并不是一个聪明人。

  说一下我自己对算法的理解:我认为算法是一个实现目标的过程,追求的是时间成本,也就是计算步骤,对于大家提到的内存消耗,我认为本身就不属于算法讨论的范畴。算法和编程语言是没有任何关系的,说白了,代码只是实现算法的工具。你用什么工具去实现,全凭你个人。

  

 

当然,内存消耗也是必须要考虑的,但是我觉得不应该是我们来考虑,或者说全局来看,这种消耗是值得的。我为什么这么说,下面我给出我的几条理由:

一、代码的阅读成本以及理解成本直接对应着错误成本

相信大家有过这个感受,一些优秀的代码,自己却很难读懂,即使理解了,让你自己独立写出来又会很难,或者过一段时间,你又忘了这段代码的意思。这个情况直接导致了你自己根本无法使用这些优秀的代码。为什么?因为从一开始你自己就没有真正理解,就和我们上学考试一样,死记硬背之后马上就忘。当然排除一些聪明的同学理解力确实强,但是很遗憾,大多数人不是!这样就会导致我们出现大量的错误。

 

二、内存消耗是我们要考虑的事情吗?

这个问题的答案是肯定的,每个程序员都必须去考虑这个问题。我这里要给大家补充说的另外一点,这个其实是一个寻找平衡点的事情。众所众知,除了汇编和c、c++,大多数语言是不需要我们直接操作内存的,像java和c#都有专门的GC去处理这个事情。可以这么说,它们都在尽量避免我们去操作内存。实际上GC在一般情况下是足够优秀的。当我们在纠结着内存消耗的时候,有没有想过,这一部分内存消耗换来的是自己代码流畅正确的运行,笔试的时候,轻松完成的快感。

 

三、最优的代码留给小机灵鬼去做

再回到最开始的问题,算法是步骤和过程,我们使用代码去实现算法,小机灵鬼的实现方式肯定要比我们普通人更省资源,那么优化代码的事情就交给他们吧,事实上我们在平时的工作中,也不需要你去实现这些算法,因为这些算法早就被完美的实现了。而我们自己理解了算法,并且也可以正确的实现算法,那么至少我们是一个懂原理,会使用工具的人。那么你就是一个优秀的程序员。

 

文末:

其实大家说的都对,然后我只是向大家表达一下我对于编程的理解。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzsfz.html