如果尝试对未排序的数据集进行二进制搜索会发生什么?

时间:2012-11-06 17:00:48

标签: java binary-search

如果尝试对未排序的数据集进行二进制搜索会发生什么?

4 个答案:

答案 0 :(得分:5)

结果不可预测。如果数据集具有目标,则可能找到也可能找不到。

编辑只是为了踢,我做了一个小实验。首先,我选择了一个数组大小并生成了一个int数组{0,1,...,size-1}。然后我改组了数组,对每个值0,1,......,size-1进行了二元搜索,并计算了其中有多少被发现。对于每个大小,我重复了shuffle / search-for-values值步骤100,000次,并记录了成功搜索的百分比。 (对于已排序的数组,这将是100%。)结果是(四舍五入到最接近的百分比):

Size    % Hit
 10      34%
 20      22%
 30      16%
 40      13%
 50      11%
 60      10%
 70       9%
 80       8%
 90       7%
100       6%

因此数组越大,不排序的效果越差。即使对于相对较小的阵列,结果也非常激烈。

答案 1 :(得分:0)

你几乎肯定找不到你一直在寻找的元素。如果数组主要排序,那么你可能会很幸运。

该算法可以通过某种方式实现检测,但除非它对数组进行全面扫描,否则无法保证二进制搜索将检测到此错误情况

答案 2 :(得分:0)

二进制搜索用于排序数组,如果在非排序数组上完成,那么<​​strong>结果肯定会不可预测且不可靠

答案 3 :(得分:0)

二进制搜索依赖于正在排序的数据。它选择一个数组中的元素并确定 1.如果这是它正在搜索的元素 2.如果它不是它正在寻找的元素,它可能在哪里找到元素。

第二点依赖于对数据进行排序以做出决定。想象一下未分类的数据。只需将搜索关键字与我们选择的元素进行比较,我们就无法确定元素的位置。

因此,二进制搜索在未排序的数据中无法一致地工作。