Java Program to Implement Merge Sort Algorithm on Linked List

This is a java program to implement merge sort algorithm using linked list.

Here is the source code of the Java Program to Implement Merge Sort Algorithm on Linked List. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.

//This is a java to sort numbers of Linked List using Merge Sort
import java.util.Random;
 
class Node 
{
    public int item;
    public Node next;
 
    public Node(int val) 
    {
        item = val;
    }
 
    public Node() 
    {}
 
    public void displayNode() 
    {
        System.out.print("[" + item + "] ");
    }
}
 
class LinkedList 
{
    private Node first;
 
    public LinkedList() 
    {
        first = null;
    }
 
    public boolean isEmpty() 
    {
        return (first == null);
    }
 
    public void insert(int val)
    {
        Node newNode = new Node(val);
        newNode.next = first;
        first = newNode;
    }
 
    public void append(Node result) 
    {
        first = result;
    }
 
    public void display() 
    {
        Node current = first;
        while (current != null) 
        {
            current.displayNode();
            current = current.next;
        }
        System.out.println("");
    }
 
    public Node extractFirst() 
    {
        return first;
    }
 
    public Node MergeSort(Node headOriginal) 
    {
        if (headOriginal == null || headOriginal.next == null)
            return headOriginal;
        Node a = headOriginal;
        Node b = headOriginal.next;
        while ((b != null) && (b.next != null)) 
        {
            headOriginal = headOriginal.next;
            b = (b.next).next;
        }
        b = headOriginal.next;
        headOriginal.next = null;
        return merge(MergeSort(a), MergeSort(b));
    }
 
    public Node merge(Node a, Node b) 
    {
        Node temp = new Node();
        Node head = temp;
        Node c = head;
        while ((a != null) && (b != null)) 
        {
            if (a.item <= b.item) 
            {
                c.next = a;
                c = a;
                a = a.next;
            }
            else 
            {
                c.next = b;
                c = b;
                b = b.next;
            }
        }
        c.next = (a == null) ? b : a;
        return head.next;
    }
}
 
class Merge_Sort 
{
    public static void main(String[] args) 
    {
        LinkedList object = new LinkedList();
        Random random = new Random();
        int N = 20;
        for (int i = 0; i < N; i++)
            object.insert(Math.abs(random.nextInt(100)));
 
        System.out.println("List items before sorting :");
        object.display();
        object.append(object.MergeSort(object.extractFirst()));
        System.out.println("List items after sorting :");
        object.display();
    }
}

Output:

$ javac Merge_Sort.java
$ java Merge_Sort
 
List items before sorting :
[41] [11] [6] [13] [41] [62] [26] [46] [71] [16] [52] [57] [23] [81] [25] [4] [20] [75] [68] [51] 
List items after sorting :
[4] [6] [11] [13] [16] [20] [23] [25] [26] [41] [41] [46] [51] [52] [57] [62] [68] [71] [75] [81]

Related posts:

Reading an HTTP Response Body as a String in Java
Hướng dẫn Java Design Pattern – Visitor
Spring Boot Integration Testing with Embedded MongoDB
Predicate trong Java 8
Java Program to Implement Sorted Circular Doubly Linked List
Java Program to Implement Hamiltonian Cycle Algorithm
Java Program to Find the Vertex Connectivity of a Graph
Java Program to Implement LinkedTransferQueue API
Java Program to Construct an Expression Tree for an Postfix Expression
Java Program to Find k Numbers Closest to Median of S, Where S is a Set of n Numbers
Sorting Query Results with Spring Data
Introduction to the Functional Web Framework in Spring 5
Java Program to Perform Polygon Containment Test
Java Program to Implement Pairing Heap
Java IO vs NIO
Java Program to Find the Minimum Element of a Rotated Sorted Array using Binary Search approach
Java Program to Implement PrinterStateReasons API
Checked and Unchecked Exceptions in Java
CyclicBarrier in Java
Java Program to Find Number of Articulation points in a Graph
Java Program to Find Number of Spanning Trees in a Complete Bipartite Graph
Vấn đề Nhà sản xuất (Producer) – Người tiêu dùng (Consumer) và đồng bộ hóa các luồng trong Java
Java – Try with Resources
4 tính chất của lập trình hướng đối tượng trong Java
Spring Security Remember Me
Java Program to Check if a Given Set of Three Points Lie on a Single Line or Not
Generic Constructors in Java
Spring Boot - Zuul Proxy Server and Routing
Java Program to implement Circular Buffer
The Basics of Java Security
Runnable vs. Callable in Java
Java Program to Perform Postorder Recursive Traversal of a Given Binary Tree