If you are a Java programmer, you might have heard about sorting algorithms in java. However, there are various algorithms in java that you will use the most. Do you know how to use them? Did you ever use them in your program? In this article, today you are going to know about the most used sorting algorithms in Java. It is especially for learners who recently started learning to program in the Java programming language. So, I hope will help you for sure. Anyways let’s get started.

Before learning the sorting algorithms in the Java programming language, there is another important thing that you need to know. You should first know what an “Algorithm” is. Let us look at the definition of an Algorithm.

Generally, according to computer programming terms, is a set of instructions that are well-defined to solve a given problem that takes a set of input and gives the required output known as an “Algorithm”.

In Java, the static methods that you can use to perform various operations on collections are known as algorithms. You can use algorithms on various collections. Such types of algorithms are also known as generic algorithms. If you are a Java programmer, you can be able to use data structures to store and organize data. They are also used to manipulate the data in those structures.

## Sorting Algorithms in Java

Now, when it comes to sorting algorithms in the Java programming language. The main task of the Sorting algorithms is to rearrange the positions of elements of an array. This will help you arrange the elements of an array either in ascending or descending order. So, let us look at the most important and most used sorting algorithms in java.

## 1) Heap Sort

This is a sorting technique or method that is used for sorting the elements in a given array. This sorting technique is based on a comparison of the Binary Heap data structure. In this sorting algorithm, you will first find the minimum element from the given array and place the minimum element at the beginning. Similarly, you need to repeat this process for the remaining elements also.

Usually, there are two kinds of heaps in this sorting algorithm. They are min-heap and max-heap. The parent’s nodes in min-heap are smaller than the children’s nodes where the root node is the smallest. But it is completely different in Max-heap. Because in max-heap, the root node is the largest. Now, you will come to know the working of a heap sort.

### Working of Heap Sort

The following are the steps involved in a heap-sort algorithm:

- Swap: In this step, you have to remove the root element and put it at the end of the array at the nth position. Then you need to put the last item of the tree in the vacant place.
- Remove: This step is used to reduce the size of the heap by 1.
- Heapify: Now you have to heapify the root element again so that we have the highest element at the root.

This process should be repeated until all the items on the list are sorted.

Now, look at the following example so that you will understand the heap-sort algorithm clearly.

```
public class HeapSortAlgorithm {
public void sort(int ar[]) {
int x = ar.length;
for (int i = x / 2 – 1; i >= 0; i–) {
heapify(ar, x, i);
}
for (int i = x – 1; i >= 0; i–) {
int temp = ar[0];
ar[0] = ar[i];
ar[i] = temp;
heapify(ar, i, 0);
}
}
void heapify(int ar[], int x, int i) {
int big = i;
int l = 2 * i + 1;
int r = 2 * i + 2;
if (l < x && ar[l] > ar[big])
big = l;
if (r < x && ar[r] > arr[big])
big = r;
if (big != i) {
int swap = ar[i];
ar[i] = ar[big];
ar[big] = swap;
heapify(ar, x, big);
}
}
static void printArray(int ar[]) {
int x = ar.length;
for (int i = 0; i < x; ++i)
System.out.print(ar[i] + ” “);
System.out.println();
}
public static void main(String args[]) {
int ar[] = { 1, 12, 9, 5, 6, 10 };
HeapSortAlgorithm hs = new HeapSortAlgorithm ();
hs.sort(ar);
System.out.println(“Resultant array is”);
printArray(ar);
}
}
```

## 2) Merge Sort

The sorting algorithm is based on the principle of the divide and conquer algorithm is known as a Merge Sort technique. In this algorithm, you will divide a problem into multiple sub-problems so that you can solve each sub-problem individually. Then, you will combine these sub-problems to form the final solutions.

When you observe, you find that sounds the merge sort looks similar to a Quicksort but the difference is it also partitions the collection. Then it recursively calls itself on the collections that are partitioned as halves.

The main difference is the fact that Quicksort is an internal, in-place sorting algorithm while Merge Sort is an external, out-of-place sorting algorithm.

This sorting algorithm is implemented by loading the larger collections into memory. You have to load them chunk by chunk as they’re needed. So there is no need to store the whole collection in the memory in the merge sort algorithm. However, it can easily and randomly access each and every element at any given time.

Let us look at an example to understand this algorithm clearly.

```
import java.util.Arrays;
class Main {
void merge(int array[], int p, int q, int r) {
int n1 = q – p + 1;
int n2 = r – q;
int L[] = new int[n1];
int M[] = new int[n2];
for (int i = 0; i < n1; i++)
L[i] = array[p + i];
for (int j = 0; j < n2; j++)
M[j] = array[q + 1 + j];
int i, j, k;
i = 0;
j = 0;
k = p;
while (i < n1 && j < n2) {
if (L[i] <= M[j]) {
array[k] = L[i];
i++;
} else {
array[k] = M[j];
j++;
}
k++;
}
while (i < n1) {
array[k] = L[i];
i++; k++;
}
while (j < n2) {
array[k] = M[j];
j++; k++;
}
}
void mergeSort(int array[], int left, int right) {
if (left < right) {
int mid = (left + right) / 2;
mergeSort(array, left, mid);
mergeSort(array, mid + 1, right);
merge(array, left, mid, right);
}
}
public static void main(String args[]) {
int[] array = { 6, 5, 12, 10, 9, 1 };
Main ob = new Main();
ob.mergeSort(array, 0, array.length – 1);
System.out.println(“Sorted Array:”);
System.out.println(Arrays.toString(array));
}
}
```

## 3) Insertion Sort

Insertion sort is a simple sorting algorithm when compared to other sorting algorithms. This algorithm allows you to sort the array by placing one element at a time in an efficient way. In this way, the original array will be modified and you don’t need any temporary structures. Let me show you how to implement this style of sorting in the Java programming language.

The following are the characteristics of an Insertion Sort Algorithm:

- This algorithm is one of the simplest algorithms with a simple implementation
- Basically, Insertion sort is efficient for small data values
- Insertion sort is adaptive in nature, i.e. it is appropriate for data sets that are already partially sorted.

The following are the steps to implement the Insertion Sort Algorithm:

- Let us first assume that the first element in the array is sorted. Now, choose the second element and you need to store this element in the key separately.
- Now, try to compare the key with the first element given to you. If you find that the first element is greater than the key, then place the key in front of the first element.
- Now, you will find that the first two elements are sorted. Then, take the third element and compare this element with the elements that are placed left to it.
- You need to place it just behind the element which is smaller than this element. If you find that there is no element smaller than it, then that element should be placed at the beginning of the array.
- Similarly, you need to place every unsorted element in the correct position.

Let us look at an example to understand this algorithm clearly. This program shows you the implementation of Insertion sort in Java.

```
import java.util.Arrays;
class InsertionSortAlgorithm {
void insertionSortAlgorithm (int array[]) {
int size = array.length;
for (int step = 1; step < size; step++) {
int key = array[step];
int j = step – 1;
// Now, try to compare key with each element on the left of it until an element smaller than
// Assume that, you have found it.
// For, you need to change the key<array[j] to key>array[j] for descending order.
while (j >= 0 && key < array[j]) {
array[j + 1] = array[j];
–j;
}
// Then, you need to Place the key next to the element just smaller than it.
array[j + 1] = key;
}
}
public static void main(String args[]) {
int[] data = { 9, 5, 1, 4, 3 };
InsertionSortAlgorithm is = new InsertionSortAlgorithm ();
is.insertionSortAlgorithm(data);
System.out.println(“The resultant Array is sorted in Ascending Order: “);
System.out.println(Arrays.toString(data));
}
}
```

Hence, I conclude that the above three sorting algorithms in java are the most used by the programmers who code using the Java program. So I suggest you learn these algorithms so that they can help you while you are developing programs related to sorting.