Welcome to **Algorithms and Data Structures Tutorial**!

## Basic algorithms

- Fizz Buzz in Java

Learn how to solve the**FizzBuzz**problem! - Java Fibonacci

How to implement**Fibonacci series**in**Java**! - Towers of Hanoi

Recursive way to move the towers around.

## Lists

- Linked List – add element at the end

How to**construct Linked List**by adding elements at the end. Also**printing contents**of Linked List and**counting**its elements. - Linked List – insert element at position

How to insert element at specified position in a Linked List. - Linked List – remove element

How to remove element from specified position in a Linked List. - Floyd Cycle Detection

How to detect**cycle in a Linked List**, find start of the cycle, and measure its length.

## Numbers

- Sieve of Eratosthenes

A fast way to find small**prime numbers**. - GCD in Java using Euclidean Algorithm

How Euclid was finding**Greatest Common Divisor**. - GCD in Clojure using Euclidean Algorithm

Euclid’s functional approach to**Greatest Common Divisor**. He loved math, so probably this version was natural for him.

## Searching

- Binary Search

The fastest way to find an element in a**sorted list**.

## Sorting

- Bubble Sort

How to push bubbles into right places in**ϴ(n²)**time! - Insertion Sort

Sort in**ϴ(n²)**time by inserting element to its correct position, like in cards. - Selection Sort

Sort in**ϴ(n²)**time by putting the next min/max element on the current position. - Merge Sort

Fast,**O(n log n)**sorting with parallelization potential. - Parallel Merge Sort

Merge Sort running parallel for maximum performance. - Quicksort

Another sorting that on average is**O(n log n)**, but is easier to implement than**merge sort**.

## Strings

- Palindrome detector

Two simple ways to verify if a String is a**palindrome**. - Caesar cipher

Find out how to encrypt/decrypt military messages like a cryptographer from the Roman Empire!

## Graphs

- Graph representation

How to represent**graphs**inside your code!