什么情况下不能使用最坏情况评估算法的复杂度?
前言 本篇文章收录于专辑: http://dwz.win/HjK ,点击解锁更多数据结构与算法的知识。 你好,我是彤哥,一个每天爬二十六层楼还不忘读源码的硬核男人。 上一节,我们从最坏、平均、最好三种情况分析了算法的复杂度,得出结论,通常来说,使用最坏情况来评估算法的复杂度完全够用了。 但是,有些算法是不能使用最坏情况来评估算法的复杂度的。 那么,有哪些算法呢? 本节,我们将从动态数组以及快速排序这两个个例入手来分析不能使用最坏情况评估复杂度的情形。 动态数组 动态数组,对应于Java中的ArrayList,在插入元素时,分成两种情况: 数组未满,元素放在size下标的位置即可; 数组满了,需要扩容,一般扩容为N倍大小,Java里面是1.5倍,扩容时需要创建一个新的数组,并把原来的元素一个一个地拷贝到新的数组中,再插入新的元素; 我简单地写一段代码,你可以感受下: public class DynamicArray { private int[] array; private int size; public DynamicArray(int capacity) { this.array = new int[capacity]; this.size = 0; } // 插入元素,时间复杂度为多少呢? public void add(int element) { //