Algorithms

Algorithm complexity

Big-O notation reference, sorting algorithm comparison.

Big-O Complexity Classes

NotationNameGrowthn=10n=100n=1,000Example
O(1)Constant•111Array index, hash lookup
O(log n)Logarithmic••3710Binary search, balanced BST
O(n)Linear•••101001,000Linear search, single loop
O(n log n)Linearithmic••••336649,966Merge sort, Heap sort, FFT
O(n²)Quadratic▲▲▲▲▲10010,0001,000,000Bubble sort, nested loops
O(n³)Cubic▲▲▲▲▲▲1,0001,000,00010⁹Matrix multiplication (naive)
O(2ⁿ)Exponential⬛1,02410³⁰10³⁰¹Recursive Fibonacci, subsets
O(n!)Factorial⬛⬛3,628,8009×10¹⁵⁷—Permutations, brute-force TSP

Sorting Algorithms

AlgorithmBestAverageWorstSpaceStableNote
Bubble sortO(n)O(n²)O(n²)O(1)YesSimple, slow
Selection sortO(n²)O(n²)O(n²)O(1)NoMinimum swaps
Insertion sortO(n)O(n²)O(n²)O(1)YesGood for small / nearly sorted
Merge sortO(n log n)O(n log n)O(n log n)O(n)YesGuaranteed, extra memory
Quick sortO(n log n)O(n log n)O(n²)O(log n)NoFast in practice, pivot matters
Heap sortO(n log n)O(n log n)O(n log n)O(1)NoIn-place, not cache-friendly
Tim sortO(n)O(n log n)O(n log n)O(n)YesPython & Java default sort
Counting sortO(n+k)O(n+k)O(n+k)O(k)YesInteger keys only
Radix sortO(nk)O(nk)O(nk)O(n+k)YesNon-comparison, fixed digits
Shell sortO(n log n)O(n^1.3)O(n²)O(1)NoGap-based insertion

Data Structure Operations

StructureAccessSearchInsertDeleteSpace
ArrayO(1)O(n)O(n)O(n)O(n)
Linked ListO(n)O(n)O(1)O(1)O(n)
Hash Table—O(1) avgO(1) avgO(1) avgO(n)
Binary Search TreeO(log n) avgO(log n) avgO(log n) avgO(log n) avgO(n)
AVL TreeO(log n)O(log n)O(log n)O(log n)O(n)
TrieO(k)O(k)O(k)O(k)O(n·k)
Graph (adj. list)O(V+E)O(V+E)O(1)O(E)O(V+E)

k = key length, V = vertices, E = edges, n = elements. avg = average case.