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:

Java Program to Implement Hash Tables Chaining with Binary Trees
Java Program to Implement Sorting of Less than 100 Numbers in O(n) Complexity
Java Program to Use rand and srand Functions
Hashing a Password in Java
Java Program to Show the Duality Transformation of Line and Point
Quick Guide to Spring Bean Scopes
More Jackson Annotations
New in Spring Security OAuth2 – Verify Claims
Function trong Java 8
Prevent Cross-Site Scripting (XSS) in a Spring Application
Java Program to Implement Self Balancing Binary Search Tree
Java 8 and Infinite Streams
Java Program to Check Cycle in a Graph using Graph traversal
Java Program to Perform Arithmetic Operations on Numbers of Size
Adding a Newline Character to a String in Java
An Intro to Spring Cloud Zookeeper
Uploading MultipartFile with Spring RestTemplate
Apache Tiles Integration with Spring MVC
Jackson JSON Views
@Before vs @BeforeClass vs @BeforeEach vs @BeforeAll
Java Program to Implement Borwein Algorithm
Java Scanner hasNext() vs. hasNextLine()
Java Program to Implement Max Heap
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
Apache Commons Collections OrderedMap
A Guide to Java HashMap
Java Program to Implement SimpeBindings API
Spring RequestMapping
Documenting a Spring REST API Using OpenAPI 3.0
Easy Ways to Write a Java InputStream to an OutputStream
Java Program to Implement the Hungarian Algorithm for Bipartite Matching
Giới thiệu Swagger – Công cụ document cho RESTfull APIs