*Quicksort* is an efficient sorting algorithm based on a “divide and conquer” approach. Choosing the dividing element at random is a good strategy to avoid bad worst-case runtime.

*Bogo sort*, also known as *stupid sort*, is a simple, but highly inefficient sorting algorithm, which simply shuffles the elements until they are sorted.

*Public-key cryptography* can be used for (at least) two purposes: A person’s public key can be used to send encrypted messages to the keys’ owner. And that person can use their private key to create digital signatures, demonstrating the authenticity of a message.

*Binary search* is a fast algorithm for finding the position of a value within a sorted array. It reflects the way people intuitively “guess numbers” by repeatedly asking “Is your number bigger or smaller than *x*?”

*Merge sort* is a recursive sorting algorithm based on a “divide and conquer” approach.

An *AVL tree* is a datastructure which guarantees fast search, insertion, and deletion of items. It’s a self-balancing variant of the *binary search tree*.

The *graph scan algorithm* traverses all reachable nodes in a graph. Its behaviour can be changed by plugging in different datastructures: Using an unordered set results in a random search, using a stack yields *depth-first search*, and using a queue gives *breadth-first search*.

This page describes *Fleury’s algorithm*, an elegant method to find an Eulerian path in a graph – a path which visits every edge exactly once.