Awesome Open Source
Awesome Open Source

License: MIT Java CI with Gradle README Checker Donate

Algorithms & data structures project

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.


This repository is contribution friendly 😃. If you'd like to add or improve an algorithm, your contribution is welcome! Please be sure to check out the Wiki for instructions.

Other programming languages?

This repository provides algorithm implementations in Java, however, there are other forks that provide implementations in other languages, most notably:

Running an algorithm implementation

To compile and run any of the algorithms here, you need at least JDK version 8. Gradle can make things more convenient for you, but it is not required.

Running with Gradle (recommended)

This project supports the Gradle Wrapper. The Gradle wrapper automatically downloads Gradle the first time it runs, so expect a delay when running the first command below.

If you are on Windows, use gradlew.bat instead of ./gradlew below.

Run a single algorithm like this:

./gradlew run -Palgorithm=<algorithm-subpackage>.<algorithm-class>

Alternatively, you can run a single algorithm specifying the full class name

./gradlew run -Pmain=<algorithm-fully-qualified-class-name>

For instance:

./gradlew run -Palgorithm=search.BinarySearch


./gradlew run

Compiling and running with only a JDK

Create a classes folder

cd Algorithms
mkdir classes

Compile the algorithm

javac -sourcepath src/main/java -d classes src/main/java/ <relative-path-to-java-source-file>

Run the algorithm

java -cp classes <class-fully-qualified-name>


$ javac -d classes -sourcepath src/main/java src/main/java/com/williamfiset/algorithms/search/
$ java -cp classes

Data Structures

Dynamic Programming

Dynamic Programming Classics

Dynamic Programming Problem Examples


Tiling problems


Graph theory

Tree algorithms

Network flow

Main graph theory algorithms

Linear algebra



Search algorithms

Sorting algorithms

String algorithms


This repository is released under the MIT license. In short, this means you are free to use this software in any personal, open-source or commercial projects. Attribution is optional but appreciated.


Consider donating to support my creation of educational content:


Related Awesome Lists
Top Programming Languages

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
Java (411,723
String (41,889
Algorithms (38,014
Tree (20,316
Mathematics (10,274
Geometry (4,419
Hashtable (1,218
Linear Algebra (1,128
Dijkstra (939
Sorting Algorithms (905
Dynamic Programming (795
Search Algorithm (607
Graph Theory (523
Nlog (437
Matrix Multiplication (288
Traveling Salesman (60
Adjacency Matrix (36
Maxflow (29
Tree Algorithms (12
Adjacency (7
Edmonds Karp Algorithm (7