Algorithms

Algorithm reference

Sorting, searching and complexity reference.

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)
StackO(n)O(n)O(1)O(1)O(n)
QueueO(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)
B-TreeO(log n)O(log n)O(log n)O(log n)O(n)
Min/Max HeapO(1) peekO(n)O(log n)O(log n)O(n)
TrieO(k)O(k)O(k)O(k)O(n·k)
Graph (adj. matrix)O(1)O(V²)O(1)O(1)O(V²)
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.