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:

Spring Security 5 for Reactive Applications
Jackson – Bidirectional Relationships
Java Program to Perform Postorder Non-Recursive Traversal of a Given Binary Tree
Comparing Dates in Java
Java Program to Perform Encoding of a Message Using Matrix Multiplication
Java Program to Find ith Largest Number from a Given List Using Order-Statistic Algorithm
Java Program to Repeatedly Search the Same Text (such as Bible by building a Data Structure)
Finding Max/Min of a List or Collection
Java Program to Generate N Number of Passwords of Length M Each
Java Program to Implement Network Flow Problem
Java Program to Implement Skew Heap
Introduction to Project Reactor Bus
Explain about URL and HTTPS protocol
Implementing a Runnable vs Extending a Thread
Autoboxing và Unboxing trong Java
A Guide to ConcurrentMap
Login For a Spring Web App – Error Handling and Localization
Spring Boot - Admin Server
Java Program to implement Dynamic Array
Hướng dẫn sử dụng biểu thức chính quy (Regular Expression) trong Java
Introduction to Liquibase Rollback
Java Program to Implement Dijkstra’s Algorithm using Priority Queue
Spring Cloud – Securing Services
Java List UnsupportedOperationException
HttpAsyncClient Tutorial
Java Program to Generate a Sequence of N Characters for a Given Specific Case
An Intro to Spring Cloud Vault
Simple Single Sign-On with Spring Security OAuth2
Generic Constructors in Java
Java Program to Implement Graph Structured Stack
SOAP Web service: Authentication trong JAX-WS
Build a REST API with Spring and Java Config