从线性查找和二分查找说起
线性查找是最基础(野蛮)的查找算法,最坏的情况从头遍历到位,最好的情况比较一次,平均时间复杂度为 N 2 \frac{N}{2} 2N。
二分查找能达到 O ( l o g 2 N ) O(log_2N) O(log2N)的时间复杂度,但是前提是列表中的数据必须是有序的。
不管是基于数组实现的列表(ArrayList)还是基于链表实现的列表(LinkedList),想要在插入新元素的同时保证列表元素的有序性,插入操作仍然需要大量的时间:
- 数组插入时保证元素有序性,时间复杂度为N(一部分用于查找元素插入的位置,一部分用于数组后移)。
- 链表插入时保证元素有序性,平均时间复杂度为 N 2 \frac{N}{2} 2