Algorithms and data structures are fundamental to efficient code and good software design. Creating and designing excellent algorithms is required for being an exemplary programmer. This repository's goal is to demonstrate how to correctly implement common data structures and algorithms in the simplest and most elegant ways.
🎬 Many of the algorithms and data structures in this repo have companion video explanations on the William Fiset YouTube channel — so if the code alone doesn't click, grab some popcorn and watch the videos!
To compile and run any of the algorithms here, you need at least JDK version 8 and Bazel
This project uses Bazel as its build system. Install Bazel by following the official installation guide.
Run a single algorithm like this:
bazel run //src/main/java/com/williamfiset/algorithms/<subpackage>:<ClassName>
For instance:
bazel run //src/main/java/com/williamfiset/algorithms/search:BinarySearch
Run all tests:
bazel test //src/test/...
Run tests for a specific package:
bazel test //src/test/java/com/williamfiset/algorithms/sorting:all
If you don't want to use Bazel, you can compile and run with just the JDK:
cd Algorithms
mkdir classes
javac -sourcepath src/main/java -d classes src/main/java/<relative-path-to-java-source-file>
java -cp classes <class-fully-qualified-name>
$ javac -d classes -sourcepath src/main/java src/main/java/com/williamfiset/algorithms/search/BinarySearch.java
$ java -cp classes com.williamfiset.algorithms.search.BinarySearch
More geometry algorithms
$ claude mcp add algorithms \
-- python -m otcore.mcp_server <graph>