查找 插入 刪除
數組 o(n) o(1) o(n)
有序數組 o(lgn) o(n) o(n)
鏈表 o(n) o(1) o(n)
有序鏈表 o(n) o(n) o(n)
二叉樹最壞 o(n) o(n) o(n)
二叉樹一般 o(lgn) o(lgn) o(lgn)
平衡樹 o(lgn) o(lgn) o(lgn)
哈希表 o(1) o(1) o(1)
(1)向一個有序數組中插入一個數的時間復雜度是多少?
查找插入位置如果用遍歷查找的是O(n),用二分查找是O(log2n)。
但是數組的插入操作需要將插入位置后的元素全部后移一位,這需要O(n)。
所以總的時間復雜度是O(n)。(O(n)+O(n)=O(n),O(log2n)+O(n)=O(n))
(2) 有序鏈表查找的時間復雜度是O(n)的原因是什么?
折半查找對鏈表而言根本不能達到O(logN)的效率。只有當訪問集合中任何一個元素的時間是常量O(1)時間時,折半查找才能達到O(logN),而鏈表訪問其中元素的平均時間是O(N)即線性時間。對用數組構造的集合才能使用折半查找。