diff --git a/src/main/java/com/thealgorithms/sorts/LinkList_Sort.java b/src/main/java/com/thealgorithms/sorts/LinkList_Sort.java new file mode 100644 index 000000000000..2480091621a9 --- /dev/null +++ b/src/main/java/com/thealgorithms/sorts/LinkList_Sort.java @@ -0,0 +1,322 @@ +/** Author : Siddhant Swarup Mallick + * Github : https://github.com/siddhant2002 + */ + +/** Program description - To sort the LinkList as per sorting technique */ + +package com.thealgorithms.sorts; +import java.util.*; +public class LinkList_Sort { + public static boolean isSorted(int p[] , int option) { + try (Scanner sc = new Scanner(System.in)) { + } + int a[] = p; + // Array is taken as input from test class + int b[] = p; + // array similar to a + int ch = option; + // Choice is choosed as any number from 1 to 3 (So the linked list will be sorted by Merge sort technique/Insertion sort technique/Heap sort technique) + switch (ch) { + case 1: + Task nm = new Task(); + Node start = null, prev = null, fresh, ptr; + for (int i = 0; i < a.length; i++) { + // New nodes are created and values are added + fresh = new Node(); // Node class is called + fresh.val = a[i]; // Node val is stored + if (start == null) + start = fresh; + else + prev.next = fresh; + prev = fresh; + } + start = nm.sort_by_mergesort(start); + // method is being called + int i=0; + for (ptr = start;ptr != null; ptr = ptr.next) { + a[i++]=ptr.val; + // storing the sorted values in the array + } + Arrays.sort(b); + // array b is sorted and it will return true when checked with sorted list + LinkList_Sort uu=new LinkList_Sort(); + if(uu.compare(a,b)) + { + return true; + } + else + { + return false; + } + // The given array and the expected array is checked if both are same then true is displayed else false is displayed + case 2: + Node start1 = null, prev1 = null, fresh1, ptr1; + for (int i1 = 0; i1 < a.length; i1++) { + // New nodes are created and values are added + fresh1 = new Node(); // New node is created + fresh1.val = a[i1]; // Value is stored in the value part of the node + if (start1 == null) + start1 = fresh1; + else + prev1.next = fresh1; + prev1 = fresh1; + } + Task1 kk = new Task1(); + start1 = kk.sort_by_insertionsort(start1); + // method is being called + int i1=0; + for (ptr1 = start1; ptr1 != null; ptr1 = ptr1.next) { + a[i1++]=ptr1.val; + // storing the sorted values in the array + } + LinkList_Sort uu1=new LinkList_Sort(); + // array b is not sorted and it will return false when checked with sorted list + if(uu1.compare(a,b)) + { + return true; + } + else + { + return false; + } + // The given array and the expected array is checked if both are same then true is displayed else false is displayed + case 3: + Task2 mm = new Task2(); + Node start2 = null, prev2 = null, fresh2, ptr2; + for (int i2 = 0; i2 < a.length; i2++) { + // New nodes are created and values are added + fresh2 = new Node(); // Node class is created + fresh2.val = a[i2]; // Value is stored in the value part of the Node + if (start2 == null) + start2 = fresh2; + else + prev2.next = fresh2; + prev2 = fresh2; + } + start2 = mm.sort_by_heapsort(start2); + // method is being called + int i3=0; + for (ptr2 = start2; ptr2 != null; ptr2 = ptr2.next) { + a[i3++]=ptr2.val; + // storing the sorted values in the array + } + Arrays.sort(b); + // array b is sorted and it will return true when checked with sorted list + LinkList_Sort uu2=new LinkList_Sort(); + if(uu2.compare(a,b)) + { + return true; + } + else + { + return false; + } + // The given array and the expected array is checked if both are same then true is displayed else false is displayed + default: + // default is used incase user puts a unauthorized value + System.out.println("Wrong choice"); + } + // Switch case is used to call the classes as per the user requirement + return false; + } + boolean compare(int a[] , int b[]) + { + for(int i=0;i= n[i]) + b[k++] = n[i++]; + else + b[k++] = n[j++]; + } + // Smallest number is stored after checking from both the arrays + while (i <= m) { + b[k++] = n[i++]; + } + while (j <= e) { + b[k++] = n[j++]; + } + for (int p = s; p <= e; p++) { + a[p] = b[p - s]; + } + } + // The method task and task1 is used to sort the linklist using merge sort +} +class Task1 { + public Node sort_by_insertionsort(Node head) { + if (head == null || head.next == null) + return head; + int c = count(head); + int a[] = new int[c]; + // Array of size c is created + a[0] = head.val; + int i; + Node ptr; + for (ptr = head.next, i = 1; ptr != null; ptr = ptr.next, i++) { + int j = i - 1; + while (j >= 0 && a[j] > ptr.val) { + // values are stored in the array + a[j + 1] = a[j]; + j--; + } + a[j + 1] = ptr.val; + } + i = 0; + for (ptr = head; ptr != null; ptr = ptr.next) { + ptr.val = a[i++]; + // Value is stored in the linklist after being sorted + } + return head; + } + + static int count(Node head) { + Node ptr; + int c = 0; + for (ptr = head; ptr != null; ptr = ptr.next) { + c++; + } + return c; + // This Method is used to count number of elements/nodes present in the linklist + // It will return a integer type value denoting the number of nodes present + } + // The method task and task1 is used to sort the linklist using insertion sort +} + +class Task2 { + static int a[]; + + public Node sort_by_heapsort(Node head) { + if (head == null || head.next == null) + return head; + int c = count(head); + a = new int[c]; + // Array of size c is created + int i = 0; + for (Node ptr = head; ptr != null; ptr = ptr.next) { + a[i++] = ptr.val; + // values are stored in the array + } + i = 0; + task(a); + for (Node ptr = head; ptr != null; ptr = ptr.next) { + ptr.val = a[i++]; + // Value is stored in the linklist after being sorted + } + return head; + } + + int count(Node head) { + int c = 0; + Node ptr; + for (ptr = head; ptr != null; ptr = ptr.next) { + c++; + } + return c; + // This Method is used to count number of elements/nodes present in the linklist + // It will return a integer type value denoting the number of nodes present + } + + void task(int n[]) { + int k = n.length; + for (int i = k / 2 - 1; i >= 0; i--) { + task1(n, k, i); + } + for (int i = k - 1; i > 0; i--) { + int d = n[0]; + n[0] = n[i]; + n[i] = d; + task1(n, i, 0); + // recursive calling of task1 method + } + } + + void task1(int n[], int k, int i) { + int p = i; + int l = 2 * i + 1; + int r = 2 * i + 2; + if (l < k && n[l] > n[p]) + p = l; + if (r < k && n[r] > n[p]) + p = r; + if (p != i) { + int d = n[p]; + n[p] = n[i]; + n[i] = d; + task1(n, k, p); + } + } + // The method task and task1 is used to sort the linklist using heap sort +} \ No newline at end of file diff --git a/src/test/java/com/thealgorithms/others/LinkList_Sort_test.java b/src/test/java/com/thealgorithms/others/LinkList_Sort_test.java new file mode 100644 index 000000000000..758d25328ad7 --- /dev/null +++ b/src/test/java/com/thealgorithms/others/LinkList_Sort_test.java @@ -0,0 +1,64 @@ +package com.thealgorithms.others; +import org.junit.jupiter.api.Test; + +import com.thealgorithms.sorts.LinkList_Sort; + +import static org.junit.jupiter.api.Assertions.*; +public class LinkList_Sort_test { + @Test + void testForOneElement() + { + int a[]={56}; + assertTrue(LinkList_Sort.isSorted(a,2)); + } + + @Test + void testForTwoElements() + { + int a[]={6,4}; + assertTrue(LinkList_Sort.isSorted(a,1)); + } + + @Test + void testForThreeElements() + { + int a[]={875,253,12}; + assertTrue(LinkList_Sort.isSorted(a,3)); + } + + @Test + void testForFourElements() + { + int a[]={86,32,87,13}; + assertFalse(LinkList_Sort.isSorted(a,2)); + } + + @Test + void testForFiveElements() + { + int a[]={6,5,3,0,9}; + assertTrue(LinkList_Sort.isSorted(a,1)); + } + + + @Test + void testForSixElements() + { + int a[]={9,65,432,32,47,327}; + assertTrue(LinkList_Sort.isSorted(a,3)); + } + + @Test + void testForSevenElements() + { + int a[]={6,4,2,1,3,6,7}; + assertTrue(LinkList_Sort.isSorted(a,1)); + } + + @Test + void testForEightElements() + { + int a[]={123,234,145,764,322,367,768,34}; + assertFalse(LinkList_Sort.isSorted(a,2)); + } +} pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy