直接无序搜索 vs 先排序后搜索

算法的时间复杂度分析和算法流程共同构成算法本身,如果一个算法的时间复杂度是指数级O(2^n)的,当面对海量数据处理时,将是灾难性的。

排序——冒泡排序及其改进版本

排序——选择排序

排序——归并排序

  • 对一个有序数列,我们使用二分搜索(binary search),可以获得 O(logn) 的时间复杂度;

  • 对一个无序数列,我们采用遍历判断的方法(linear),时间复杂度为: O(n)

  • 对一个无序数列,如果我们使用归并排序(时间复杂度为 O(nlogn) )首先进行排序,再对排序后的数列使用二分搜索的方式进行查找,最终的时间复杂度为: O(nlogn)+O(logn)

如果对一个列表只做一次搜索,

O(nlogn)+O(logn)>O(n)

我们对无序的数列进行线性搜索;

如果对一个列别做多次搜索,归并排序只做一次:

O(nlogn)+kO(logn)<kO(n)

这时,我们就需要采取先归并排序后二分搜索的策略了,这就引出了 分摊耗时(amortize/amortization)的概念,也即多次搜索,共享分担一次排序所需的时间复杂度;

你可能感兴趣的:(直接无序搜索 vs 先排序后搜索)