为什么二分查找法一定要用有序数组

之前写过一个二分查找法实现linkedlist在指定位置插入数据,查找的速度很不错,于是又看了一下二分查找法的资料,发现资料里面提到二分查找法需要有序集合才能实现。当时不甚了解,今日突然明悟。

我自己实现的插入是因为通过索引来查找插入的位置,索引本身就是有序的,通过二分查找没有任何问题。但在遍历linkedlist时,我们很有可能是要找到某个值,而不知道索引,此时如果不对linkedlist进行值排序,则无法再通过二分查找来实现。

教材太多坑了,总是直说结果,不说原因,导致初学者很难理解为什么。包括链表结构和数组结构的新增数据的速度问题也是直说链表插入比数组快。然而实际情况并不完全是,对linkedlist和arraylist的插入如果发生在末尾,arraylist速度远比linkedlist快,而且数据量越大arraylist就比linkedlist快更多,这是因为插入速度在末尾arraylist直接拷贝自身再加上新增的数据即可,不需要移动数组元素。而linkedlist每次都要遍历自身去找到末尾。

如果插入发生在中间,并且越靠前,则需要看数据量,如果数据量在10000以内,则arraylist比还是会快一点,如果超过这个数量,并且数据量越大则linkedlist的速度就要快,这是因为插入发生在中间时并且随着数据量增加arraylist不仅需要开辟内存空间,还需要移动数组元素,此时导致arraylist速度大幅度下降。

你可能感兴趣的:(数据集合)