From 7962e1421568489d7ecd75b65af903682dbc61df Mon Sep 17 00:00:00 2001 From: Caleb Fontenot Date: Fri, 26 Jan 2024 15:30:51 -0600 Subject: [PATCH] sync --- .gitignore | 2 + MergeSort/pom.xml | 14 ++ .../calebfontenot/mergesort/MergeSort.java | 88 +++++++++++ .../ProgrammingExam2_CalebFontenot/pom.xml | 14 ++ .../ProgrammingExam2_CalebFontenot.java | 144 ++++++++++++++++++ 5 files changed, 262 insertions(+) create mode 100644 MergeSort/pom.xml create mode 100644 MergeSort/src/main/java/com/calebfontenot/mergesort/MergeSort.java create mode 100644 Semester 3/Exams/ProgrammingExam2_CalebFontenot/pom.xml create mode 100644 Semester 3/Exams/ProgrammingExam2_CalebFontenot/src/main/java/com/calebfontenot/programmingexam2_calebfontenot/ProgrammingExam2_CalebFontenot.java diff --git a/.gitignore b/.gitignore index 8fb60fb..4042a10 100644 --- a/.gitignore +++ b/.gitignore @@ -198,3 +198,5 @@ /Semester 4/Assignments/DAO/target/ /Semester 4/Assignments/ProjectTrees_CalebFontenot/target/ /Semester 4/Assignments/DataStructures/target/ +/MergeSort/target/ +/Semester 3/Exams/ProgrammingExam2_CalebFontenot/target/ diff --git a/MergeSort/pom.xml b/MergeSort/pom.xml new file mode 100644 index 0000000..800a51a --- /dev/null +++ b/MergeSort/pom.xml @@ -0,0 +1,14 @@ + + + 4.0.0 + com.calebfontenot + MergeSort + 1.0-SNAPSHOT + jar + + UTF-8 + 20 + 20 + com.calebfontenot.mergesort.MergeSort + + \ No newline at end of file diff --git a/MergeSort/src/main/java/com/calebfontenot/mergesort/MergeSort.java b/MergeSort/src/main/java/com/calebfontenot/mergesort/MergeSort.java new file mode 100644 index 0000000..c18c8dc --- /dev/null +++ b/MergeSort/src/main/java/com/calebfontenot/mergesort/MergeSort.java @@ -0,0 +1,88 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + */ +package com.calebfontenot.mergesort; + +/** + * + * @author caleb + */ +public class MergeSort { + + public static void printArray(int[] array) { + for (int i = 0; i < array.length; i++) { + System.out.print(array[i] + " "); + } + System.out.println(); + } + + public static void main(String args[]) { + + // merge sort = recursively divide array in 2, sort, re-combine + // run-time complexity = O(n Log n) + // space complexity = O(n) + int[] array = {8, 2, 5, 3, 4, 7, 6, 1, 0}; + printArray(array); + mergeSort(array); + printArray(array); + + } + + private static void mergeSort(int[] array) { + + int length = array.length; + if (length <= 1) { + return; //base case + } + int middle = length / 2; + int[] leftArray = new int[middle]; + int[] rightArray = new int[length - middle]; + int i = 0; //left array + int j = 0; //right array + + for (; i < length; i++) { + if (i < middle) { + leftArray[i] = array[i]; + } else { + rightArray[j] = array[i]; + j++; + } + } + mergeSort(leftArray); + mergeSort(rightArray); + merge(leftArray, rightArray, array); + } + + private static void merge(int[] leftArray, int[] rightArray, int[] array) { + + int leftSize = array.length / 2; + int rightSize = array.length - leftSize; + int i = 0, l = 0, r = 0; //indices + + //check the conditions for merging + while (l < leftSize && r < rightSize) { + if (leftArray[l] < rightArray[r]) { + array[i] = leftArray[l]; + i++; + l++; + } else { + array[i] = rightArray[r]; + i++; + r++; + } + } + + while (l < leftSize) { + array[i] = leftArray[l]; + i++; + l++; + } + + while (r < rightSize) { + array[i] = rightArray[r]; + i++; + r++; + } + } + +} diff --git a/Semester 3/Exams/ProgrammingExam2_CalebFontenot/pom.xml b/Semester 3/Exams/ProgrammingExam2_CalebFontenot/pom.xml new file mode 100644 index 0000000..7e046d8 --- /dev/null +++ b/Semester 3/Exams/ProgrammingExam2_CalebFontenot/pom.xml @@ -0,0 +1,14 @@ + + + 4.0.0 + com.calebfontenot + ProgrammingExam2_CalebFontenot + 1.0-SNAPSHOT + jar + + UTF-8 + 20 + 20 + com.calebfontenot.programmingexam2_calebfontenot.ProgrammingExam2_CalebFontenot + + \ No newline at end of file diff --git a/Semester 3/Exams/ProgrammingExam2_CalebFontenot/src/main/java/com/calebfontenot/programmingexam2_calebfontenot/ProgrammingExam2_CalebFontenot.java b/Semester 3/Exams/ProgrammingExam2_CalebFontenot/src/main/java/com/calebfontenot/programmingexam2_calebfontenot/ProgrammingExam2_CalebFontenot.java new file mode 100644 index 0000000..c75414b --- /dev/null +++ b/Semester 3/Exams/ProgrammingExam2_CalebFontenot/src/main/java/com/calebfontenot/programmingexam2_calebfontenot/ProgrammingExam2_CalebFontenot.java @@ -0,0 +1,144 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + */ + +package com.calebfontenot.programmingexam2_calebfontenot; + +/** + * + * @author caleb + */ + +/** + * + * @author ar114 + * @param + */ +public class ProgrammingExam2_CalebFontenot { + + Node head; + Node tail; + + class Node { + + T t; + Node l; + Node r; + } + + public T removeAt(int pos) { + if (pos < 0 || pos > size() - 1) { + throw new IndexOutOfBoundsException(); + } + + //list is empty + if (size() == 0) { + throw new RuntimeException("The list empty."); + } + T returnT = null; + + if (pos == 0)//remove at 0 + { + Node pointer = head.r; + returnT = (T) head.t; + pointer.l = null; + head = pointer; + } else if (pos == (size() - 1))//remove at end + { + Node pointer = tail.l.l; + returnT = (T) tail.t; + pointer.r = null; + tail = pointer; + } else//remove in the middle + { + // Iterate to the element position + Node pointer = head; + for (int i = 0; i < pos - 1; ++i) { + pointer = pointer.r; + } + returnT = (T) pointer.r.t; + pointer.r = pointer.r.r; + pointer.l = pointer.r; + + + } + + return returnT; + } + + public void clear() { + head = tail = null; + } + + public void addAt(T t, int pos) { + if (pos < 0 || pos > size()) { + throw new IndexOutOfBoundsException(); + } + Node newNode = new Node(); + newNode.t = t; + if (head == null)//list is empty + { + head = tail = newNode; + } else if (pos == 0)//add at the front + { + newNode.r = head; + head.l = newNode; + head = newNode; + } else if (pos == size())//add at the end + { + newNode.l = tail; + tail.r = newNode; + tail = newNode; + } else//middle + { + Node p = head; + for (int i = 0; i < pos - 1; ++i) { + p = p.r; + } + newNode.l = p; + newNode.r = p.r; + p.r.l = newNode; + p.r = newNode; + } + } + + public int size() { + Node p = head; + int count = 0; + while (p != null) { + count++; + p = p.r; + } + return count; + } + + @Override + public String toString() { + String s = ""; + Node p = head; + while (p != null) { + s += p.t.toString() + " "; + p = p.r; + } + return s; + } + + public static void main(String[] args) { + ProgrammingExam2_CalebFontenot list = new ProgrammingExam2_CalebFontenot(); + + list.addAt(20, 0); + list.addAt(10, 0); + list.addAt(40, 2); + list.addAt(30, 2); + list.addAt(50, 4); + System.out.println(list); + System.out.println(list.removeAt(0)); + System.out.println(list); + System.out.println(list.removeAt(2)); + System.out.println(list); + + System.out.println(list.removeAt(2)); + System.out.println(list.toString()); + } + +}