Question: Implement a sort method public void sort ( ) Implement any sort algorithm. Do not use any of Java's built - in sorting algorithms. This
Implement a sort method
public void sort
Implement any sort algorithm. Do not use any of Java's builtin sorting algorithms.
This is my current code. I was able to get close, but the only things that are messed up with it are the shuffles and 'Adding more elements and shuffling' components:
import java.util.AbstractList;
import java.util.Random;
public class MyLinkedList extends AbstractList
private Node head;
private int size ;
private static class Node
E data;
Node next;
NodeE data
this.data data;
@Override
public E getint index
checkIndexindex;
Node current head;
for int i ; i index; i
current current.next;
return current.data;
@Override
public int size
return size;
@Override
public boolean addE e
Node newNode new Nodee;
if head null
head newNode;
else
Node current head;
while currentnext null
current current.next;
current.next newNode;
size;
return true;
@Override
public void addint index, E element
if index index size
throw new IndexOutOfBoundsExceptionIndex: index Size: size;
Node newNode new Nodeelement;
if index
newNode.next head;
head newNode;
else
Node prev getNodeAtindex ;
newNode.next prev.next;
prev.next newNode;
size;
@Override
public E removeint index
checkIndexindex;
Node current head;
if index
head head.next;
else
Node prev getNodeAtindex ;
current prev.next;
prev.next current.next;
size;
return current.data;
@Override
public E setint index, E element
checkIndexindex;
Node current getNodeAtindex;
E oldValue current.data;
current.data element;
return oldValue;
@Override
public void clear
head null;
size ;
public void sort
head mergeSorthead;
private Node mergeSortNode node
if node null node.next null
return node;
Node middle getMiddlenode;
Node nextOfMiddle middle.next;
middle.next null;
Node left mergeSortnode;
Node right mergeSortnextOfMiddle;
return mergeleft right;
private Node mergeNode left, Node right
Node sorted null;
if left null return right;
if right null return left;
if leftdata.compareTorightdata
sorted left;
sorted.next mergeleftnext, right;
else
sorted right;
sorted.next mergeleft right.next;
return sorted;
private Node getMiddleNode node
if node null return node;
Node slow node, fast node.next;
while fast null && fast.next null
slow slow.next;
fast fast.next.next;
return slow;
public void shuffleint times
Random rand new Random;
for int i ; i times; i
int index rand.nextIntsize;
int index rand.nextIntsize;
Node node getNodeAtindex;
Node node getNodeAtindex;
E temp nodedata;
nodedata nodedata;
nodedata temp;
private Node getNodeAtint index
checkIndexindex;
Node current head;
for int i ; i index; i
current current.next;
return current;
private void checkIndexint index
if index index size
throw new IndexOutOfBoundsExceptionIndex: index Size: size;
@Override
public String toString
StringBuilder sb new StringBuilder;
if head null
sbappend;
else
Node current head;
while current null
sbappendcurrentdata;
if currentnext null
sbappend;
current current.next;
sbappend;
return sbtoString;
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
