All sorting methods presented so far are based on the comparison of two elements on smaller, larger or equal. You will learn that there are also so-called non-comparison-based sorting methods in this article about Counting Sort.

# Algorithms and Data Structures

In this article, I’ll show you that Heapsort has nothing to do with the Java heap. I’ll show how it works, its Java source code, and I’ll explain how to determine its time complexity.

This article describes how Merge Sort works, shows its Java source code and explains how to determine its time complexity.

This article describes how Quicksort works, shows the Java source code and explains how to determine its time complexity.

In this article, I describe how Bubble Sort works, introduce the source code, and explain how to derive its time complexity.

In this article, I describe how Selection Sort works, show its source code, and explain its derivation of time complexity.

This article describes how Insertion Sort works, shows an implementation in Java and explains the time complexity.

This tutorial explains – step by step and with many code examples – how to sort primitive data types (ints, longs, doubles, etc.) and objects of any class in Java.

If you need a refresher on how the most common sorting algorithms work and how they differ, this series is for you.

In this article, I will explain the big O notation (and the time and space complexity described with it) only using examples and diagrams – and entirely without mathematical formulas, proofs and symbols like θ, Ω, ω, ∈, ∀, ∃ and ε.