常見資料結構和演算法效率的對比
1. 資料結構部分
資料結構中常用的操作的效率表
通用資料結構 |
查詢 |
插入 |
刪除 |
遍歷 |
陣列 |
O(N) |
O(N) |
O(N) |
— |
有序陣列 |
O(logN) |
O(N) |
O(N) |
O(N) |
連結串列 |
O(N) |
O(1) |
O(N) |
— |
有序連結串列 |
O(N) |
O(N) |
O(N) |
O(N) |
二叉樹 |
O(logN) |
O(logN) |
O(logN) |
O(N) |
二叉樹(最壞) |
O(N) |
O(N) |
O(N) |
O(N) |
<紅黑樹 |
O(logN) |
O(logN) |
O(logN) |
O(N) |
2-3-4樹 |
O(logN) |
O(logN) |
O(logN) |
O(N) |
雜湊表 |
O(1) |
O(1) |
O(1) |
— |
專用資料結構 |
|
|
|
|
棧 |
— |
O(1) |
O(1) |
— |
佇列 |
— |
O(1) |
O(1) |
— |
優先順序佇列 |
— |
O(N) |
O(1) |
— |
優先順序佇列(堆) |
— |
O(logN) |
O(logN) |
|
2. 排序演算法
常見的排序演算法比較表
排序 |
平均情況 |
最好情況 |
最壞情況 |
穩定與否 |
空間複雜度 |
氣泡排序 |
O(N2) |
O(N) |
O(N2) |
穩定 |
1 |
選擇排序 |
O(N2) |
O(N2) |
O(N2) |
不穩定 |
1 |
插入排序 |
O(N2) |
O(N) |
O(N2) |
穩定 |
1 |
希爾排序 |
O(NlogN) |
(依賴於增量序列) |
不穩定 |
1 |
|
快速排序 |
O(NlogN) |
O(NlogN) |
O(N2) |
不穩定 |
O(logN) |
歸併排序 |
O(NlogN) |
O(NlogN) |
O(NlogN) |
穩定 |
O(N) |
二叉樹排序 |
O(NlogN) |
O(NlogN) |
O(N2) |
穩定 |
O(N) |
堆排序 |
O(NlogN) |
O(NlogN) |
O(NlogN) |
不穩定 |
1 |
O(N+E) |
— |
— |
— |
O(N) |
1. 資料結構部分
資料結構中常用的操作的效率表
通用資料結構 |
查詢 |
插入 |
刪除 |
遍歷 |
陣列 |
O(N) |
O(N) |
O(N) |
— |
有序陣列 |
O(logN) |
O(N) |
O(N) |
O(N) |
連結串列 |
O(N) |
O(1) |
O(N) |
— |
有序連結串列 |
O(N) |
O(N) |
O(N) |
O(N) |
二叉樹 |
O(logN) |
O(logN) |
O(logN) |
O(N) |
二叉樹(最壞) |
O(N) |
O(N) |
O(N) |
O(N) |
<紅黑樹 |
O(logN) |
O(logN) |
O(logN) |
O(N) |
2-3-4樹 |
O(logN) |
O(logN) |
O(logN) |
O(N) |
雜湊表 |
O(1) |
O(1) |
O(1) |
— |
專用資料結構 |
|
|
|
|
棧 |
— |
O(1) |
O(1) |
— |
佇列 |
— |
O(1) |
O(1) |
— |
優先順序佇列 |
— |
O(N) |
O(1) |
— |
優先順序佇列(堆) |
— |
O(logN) |
O(logN) |
|