Class
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
import java.util.Collections;
public class Beachgoer implements Comparable<Beachgoer>{
private String name;
private int length;
// Constructor
public Beachgoer(String name, int length) {
this.name = name;
this.length = length;
}
// Getter methods
public String getName() {
return name;
}
public int getLength() {
return length;
}
@Override
public int compareTo(Beachgoer other) {
return Integer.compare(this.length, other.length);
}
public static ArrayList<Beachgoer> createList(){
Beachgoer bg1 = new Beachgoer("Scuba Diver", 1);
Beachgoer bg2 = new Beachgoer("Karen", 2);
Beachgoer bg3 = new Beachgoer("Beatboxer", 3);
Beachgoer bg4 = new Beachgoer("Corn Oil", 4);
Beachgoer bg5 = new Beachgoer("Lifeguard", 5);
Beachgoer bg6 = new Beachgoer("Runner", 6);
Beachgoer bg7 = new Beachgoer("Rapper", 7);
Beachgoer bg8 = new Beachgoer("Beach Volleyball Dude", 8);
Beachgoer bg9 = new Beachgoer("M.A.T.I", 9);
Beachgoer bg10 = new Beachgoer("Click, Half Dolphin, Half Man", 10);
Beachgoer bg11 = new Beachgoer("Sandcastle", 11);
Beachgoer bg12 = new Beachgoer("Beach Volleyball Dudette", 12);
Beachgoer bg13 = new Beachgoer("Surfer", 13);
// Creating a list of Beachgoer objects
ArrayList<Beachgoer> beachgoerList = new ArrayList<Beachgoer>();
beachgoerList.add(bg1);
beachgoerList.add(bg2);
beachgoerList.add(bg3);
beachgoerList.add(bg4);
beachgoerList.add(bg5);
beachgoerList.add(bg6);
beachgoerList.add(bg7);
beachgoerList.add(bg8);
beachgoerList.add(bg9);
beachgoerList.add(bg10);
beachgoerList.add(bg11);
beachgoerList.add(bg12);
beachgoerList.add(bg13);
Collections.shuffle(beachgoerList);
return beachgoerList;
}
public static ArrayList<Beachgoer> createShorterList(){
Beachgoer bg1 = new Beachgoer("Scuba Diver", 1);
Beachgoer bg2 = new Beachgoer("Karen", 2);
Beachgoer bg3 = new Beachgoer("Beatboxer", 3);
Beachgoer bg4 = new Beachgoer("Corn Oil", 4);
Beachgoer bg5 = new Beachgoer("Lifeguard", 5);
// Creating a list of Beachgoer objects
ArrayList<Beachgoer> beachgoerList = new ArrayList<Beachgoer>();
beachgoerList.add(bg1);
beachgoerList.add(bg2);
beachgoerList.add(bg3);
beachgoerList.add(bg4);
beachgoerList.add(bg5);
Collections.shuffle(beachgoerList);
return beachgoerList;
}
public static void main(String[] args) {
// Creating objects of Beachgoer
Beachgoer bg1 = new Beachgoer("Scuba Diver", 1);
Beachgoer bg2 = new Beachgoer("Karen", 2);
Beachgoer bg3 = new Beachgoer("Beatboxer", 3);
Beachgoer bg4 = new Beachgoer("Corn Oil", 4);
Beachgoer bg5 = new Beachgoer("Lifeguard", 5);
Beachgoer bg6 = new Beachgoer("Runner", 6);
Beachgoer bg7 = new Beachgoer("Rapper", 7);
Beachgoer bg8 = new Beachgoer("Beach Volleyball Dude", 8);
Beachgoer bg9 = new Beachgoer("M.A.T.I", 9);
Beachgoer bg10 = new Beachgoer("Click, Half Dolphin, Half Man", 10);
Beachgoer bg11 = new Beachgoer("Sandcastle", 11);
Beachgoer bg12 = new Beachgoer("Beach Volleyball Dudette", 12);
Beachgoer bg13 = new Beachgoer("Surfer", 13);
// Creating a list of Beachgoer objects
List<Beachgoer> beachgoerList = new ArrayList<Beachgoer>();
beachgoerList.add(bg1);
beachgoerList.add(bg2);
beachgoerList.add(bg3);
beachgoerList.add(bg4);
beachgoerList.add(bg5);
beachgoerList.add(bg6);
beachgoerList.add(bg7);
beachgoerList.add(bg8);
beachgoerList.add(bg9);
beachgoerList.add(bg10);
beachgoerList.add(bg11);
beachgoerList.add(bg12);
beachgoerList.add(bg13);
Iterator<Beachgoer> iterator = beachgoerList.iterator();
int i = 0;
while (iterator.hasNext()) {
i++;
Beachgoer beachgoer = iterator.next();
System.out.println("Name: " + beachgoer.getName());
System.out.println("Length: " + beachgoer.getLength());
System.out.println();
if(i == 3){
break;
}
}
}
}
Beachgoer.main(null);
Name: Scuba Diver
Length: 1
Name: Karen
Length: 2
Name: Beatboxer
Length: 3
Using Linked Lists and Implementing
public class LinkedList<T extends Comparable<T>> {
private class Node {
T data;
Node next;
Node(T data) {
this.data = data;
this.next = null;
}
}
private Node head;
public LinkedList() {
this.head = null;
}
public void add(T data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
return;
}
Node lastNode = head;
while (lastNode.next != null) {
lastNode = lastNode.next;
}
lastNode.next = newNode;
}
public void display() {
Node current = head;
while (current != null) {
System.out.print(current.data + " ");
current = current.next;
}
System.out.println();
}
public void selectionSort() {
if (head == null || head.next == null) {
return;
}
Node current = head;
while (current != null) {
Node min = current;
Node nextNode = current.next;
while (nextNode != null) {
if (nextNode.data.compareTo(min.data) < 0) {
min = nextNode;
}
nextNode = nextNode.next;
}
// Swap data between current node and min node
if (min != current) {
T temp = current.data;
current.data = min.data;
min.data = temp;
}
current = current.next;
}
}
public void insertionSort() {
if (head == null || head.next == null) {
return;
}
Node sorted = null;
Node current = head;
while (current != null) {
Node next = current.next;
sorted = insertSorted(sorted, current);
current = next;
}
head = sorted;
}
private Node insertSorted(Node sorted, Node newNode) {
if (sorted == null || sorted.data.compareTo(newNode.data) >= 0) {
newNode.next = sorted;
sorted = newNode;
} else {
Node current = sorted;
while (current.next != null && current.next.data.compareTo(newNode.data) < 0) {
current = current.next;
}
newNode.next = current.next;
current.next = newNode;
}
return sorted;
}
public void bubbleSort() {
if (head == null || head.next == null) {
return;
}
boolean swapped;
Node current;
Node lastUnsorted = null;
do {
swapped = false;
current = head;
while (current.next != lastUnsorted) {
if (current.data.compareTo(current.next.data) > 0) {
T temp = current.data;
current.data = current.next.data;
current.next.data = temp;
swapped = true;
}
current = current.next;
}
lastUnsorted = current;
} while (swapped);
}
public void mergeSort() {
head = mergeSortRec(head);
}
private Node mergeSortRec(Node head) {
if (head == null || head.next == null) {
return head;
}
Node middle = getMiddle(head);
Node nextOfMiddle = middle.next;
middle.next = null;
Node left = mergeSortRec(head);
Node right = mergeSortRec(nextOfMiddle);
return sortedMerge(left, right);
}
private Node getMiddle(Node head) {
if (head == null) {
return head;
}
Node slow = head, fast = head;
while (fast.next != null && fast.next.next != null) {
slow = slow.next;
fast = fast.next.next;
}
return slow;
}
private Node sortedMerge(Node left, Node right) {
if (left == null) {
return right;
}
if (right == null) {
return left;
}
Node result;
if (left.data.compareTo(right.data) <= 0) {
result = left;
result.next = sortedMerge(left.next, right);
} else {
result = right;
result.next = sortedMerge(left, right.next);
}
return result;
}
public static void main(String[] args) {
// Example usage:
// Creating a linked list of integers
LinkedList<Integer> intList = new LinkedList<>();
intList.add(3);
intList.add(1);
intList.add(2);
System.out.println("Original list:");
intList.display();
intList.insertionSort();
System.out.println("Sorted list using Insertion Sort:");
intList.display();
intList.add(3);
intList.add(1);
intList.add(2);
intList.bubbleSort();
System.out.println("Sorted list using Bubble Sort:");
intList.display();
intList.add(3);
intList.add(1);
intList.add(2);
intList.selectionSort();
System.out.println("Sorted list using Selection Sort:");
intList.display();
intList.add(3);
intList.add(1);
intList.add(2);
intList.mergeSort();
System.out.println("Sorted list using Merge Sort:");
intList.display();
}
}
LinkedList.main(null);
Original list:
3 1 2
Sorted list using Insertion Sort:
1 2 3
Sorted list using Bubble Sort:
1 1 2 2 3 3
Sorted list using Selection Sort:
1 1 1 2 2 2 3 3 3
Sorted list using Merge Sort:
1 1 1 1 2 2 2 2 3 3 3 3
Without Using Linked Lists
import java.util.ArrayList;
import java.util.List;
public class Collector<T extends Comparable<T>> {
private List<T> items;
public Collector() {
items = new ArrayList<>();
}
public void add(T item) {
items.add(item);
}
public List<T> getItems() {
return items.t;
}
// Bubble Sort
public void bubbleSort() {
int n = items.size();
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (items.get(j).compareTo(items.get(j + 1)) > 0) {
T temp = items.get(j);
items.set(j, items.get(j + 1));
items.set(j + 1, temp);
}
}
}
}
// Insertion Sort
public void insertionSort() {
int n = items.size();
for (int i = 1; i < n; i++) {
T key = items.get(i);
int j = i - 1;
while (j >= 0 && items.get(j).compareTo(key) > 0) {
items.set(j + 1, items.get(j));
j = j - 1;
}
items.set(j + 1, key);
}
}
// Merge Sort
public void mergeSort() {
items = mergeSort(items);
}
private List<T> mergeSort(List<T> list) {
if (list.size() <= 1) {
return list;
}
int middle = list.size() / 2;
List<T> left = new ArrayList<>(list.subList(0, middle));
List<T> right = new ArrayList<>(list.subList(middle, list.size()));
left = mergeSort(left);
right = mergeSort(right);
return merge(left, right);
}
private List<T> merge(List<T> left, List<T> right) {
List<T> result = new ArrayList<>();
int leftIndex = 0, rightIndex = 0;
while (leftIndex < left.size() && rightIndex < right.size()) {
if (left.get(leftIndex).compareTo(right.get(rightIndex)) <= 0) {
result.add(left.get(leftIndex));
leftIndex++;
} else {
result.add(right.get(rightIndex));
rightIndex++;
}
}
result.addAll(left.subList(leftIndex, left.size()));
result.addAll(right.subList(rightIndex, right.size()));
return result;
}
// Selection Sort
public void selectionSort() {
int n = items.size();
for (int i = 0; i < n - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (items.get(j).compareTo(items.get(minIndex)) < 0) {
minIndex = j;
}
}
T temp = items.get(minIndex);
items.set(minIndex, items.get(i));
items.set(i, temp);
}
}
public static void main(String[] args) {
Collector<Integer> collector = new Collector<>();
collector.add(5);
collector.add(3);
collector.add(8);
collector.add(1);
collector.add(9);
Collector<Integer> collector2 = new Collector<>();
collector2.add(5);
collector2.add(3);
collector2.add(8);
collector2.add(1);
collector2.add(9);
Collector<Integer> collector3= new Collector<>();
collector3.add(5);
collector3.add(3);
collector3.add(8);
collector3.add(1);
collector3.add(9);
Collector<Integer> collector4= new Collector<>();
collector4.add(5);
collector4.add(3);
collector4.add(8);
collector4.add(1);
collector4.add(9);
System.out.println("Original: " + collector.getItems());
System.out.println("Original: " + collector2.getItems());
System.out.println("Original: " + collector3.getItems());
System.out.println("Original: " + collector4.getItems());
// Uncomment the sorting algorithm you want to test
collector.bubbleSort();
collector.insertionSort();
collector.mergeSort();
collector.selectionSort();
System.out.println("Sorted: " + collector.getItems());
System.out.println("Sorted: " + collector2.getItems());
System.out.println("Sorted: " + collector3.getItems());
System.out.println("Sorted: " + collector4.getItems());
}
}