我应该使用哪种排序和查找算法

基本算法库


基本算法库的封装:Algorithm

参考书籍《算法(第四版)》

排序


排序算法的好坏很大程度上取决于它的应用场景具体实现。下表总结了常用的排序算法的各种重要性质。其中选择排序和插入排序是初级排序算法,其余为高级排序算法。一般情况下高级排序算法都是不稳定的。

各种排序算法的性能特点如下:

排序

在大多数实际情况下,快速排序是最佳选择。当然,面对多种排序算法和各式各样的计算机和系统,这么一句干巴巴的话很难让人信服。例如:如果稳定性很重要而空间又不是问题,归并排序可能是最好的选择。但无可否认的是,快速排序是最快的通用排序算法

查找


各种查找算法的性能特点如下:

查找

由上表可以知道,对于典型的应用程序,应该在散列表二叉查找树之间进行选择。

相对二叉查找树,散列表的优点在于代码更加简单,并且查找的时间最优(常数级别,只要键的数据类型是标准的或者简单到我们可以为它写出满足均匀性假设的高效散列函数即可)。

二叉查找树相对于散列表的优点在于抽象结构更加简单(不需要设计散列函数),红黑树可以保证最坏情况下的性能并且它支持的操作更加多(如排名、选择、排序和范围查找)。

根据经验法则,大多数程序员的第一选择都是散列表,在其他因素更重要的时候才会选择红黑树。