排序算法效率

时间:2015-02-22 03:55:23

标签: java c haskell quicksort

我想问一般问题。

我正在比较C,Java和Haskell上的排序运行时间。提供相同级别的优化(当然可能会有所不同),哪种语言应该具有最快的运行时间,哪一种最慢(理论上)? 他们都将阅读相同的文本文件并按字母顺序排序单词。 如果我能得到一个很好的深度解释,并且非常感激。

感谢〜

3 个答案:

答案 0 :(得分:5)

对此没有“理论上”的答案。没有合理的“理论”可以让你做出准确的预测。

此外,对程序语言表现进行“理论”比较的整个想法是荒谬的。性能比较是关于在实际(非理论)数据集上运行在实际(非理论)机器上的实际(非理论)编译器编译的实际(非理论)程序。


如果您要求“经验法则”猜测,基于典型应用程序,典型编译器,程序员技能的等效级别以及所需的程序员时间,那么:

  • C可能是最快的
  • Java可能是C
  • 速度的1/3到1倍
  • Haskell的速度可能是Java的1/2到1倍。

(根据“基准游戏”网站截至2015年2月22日所说的内容。)

然而 ......对于某些应用程序而言,这可能会有所不同,这在很大程度上取决于编译器的成熟度以及程序员在各自语言中的技能。

除了之外......一个成熟的软件工程师/项目经理不会选择项目的编程语言,而只选择哪一个能给出最快的结果。其他因素通常比原始速度更重要。

答案 1 :(得分:2)

理论上,他们都将执行相同的算法,因此您实际上只处理不同语言的变幻莫测的问题。实现,这是一个实际的 - 而不是一个理论上的问题。

回答实际问题的唯一方法是选择具体的实现(语言,编译器,体系结构,程序,输入等)并全面地将它们相互比较。

答案 2 :(得分:0)

引用@coobird's回答,

  

关于C没有太多特别之处。这是它快速发生的原因之一。

     

支持garbage collection的新语言,   dynamic typing和其他设施,使其更容易   程序员编写程序。

     

问题是,还有额外的处理开销   降低应用程序的性能。 C没有任何   那,这意味着没有开销,但这意味着   程序员需要能够分配内存并释放它们   阻止memory leaks,并且必须处理静态类型   变量

     

也就是说,许多语言和平台,例如Java(带有Java)   Vitual Machine)和.NET(及其公共语言运行时)都有   多年来改进了性能,例如just-in-time compilation等从字节码生成本机机器代码的问题   实现更高的性能。