From 76308586b1884f2c139a0e697c2efd6a115a8e90 Mon Sep 17 00:00:00 2001 From: zevolution Date: Wed, 3 Mar 2021 23:52:06 -0300 Subject: [PATCH 1/8] Added test to prevents modification in original array --- .../br/com/zevolution/algorithms/sorting/SortTester.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/test/java/br/com/zevolution/algorithms/sorting/SortTester.java b/src/test/java/br/com/zevolution/algorithms/sorting/SortTester.java index c6b8afd..ff120e5 100644 --- a/src/test/java/br/com/zevolution/algorithms/sorting/SortTester.java +++ b/src/test/java/br/com/zevolution/algorithms/sorting/SortTester.java @@ -3,6 +3,8 @@ import static br.com.zevolution.algorithms.sorting.SortingTestData.*; import static org.junit.Assert.*; +import java.util.Arrays; + public class SortTester { public static void testSort(Sort sorter) { @@ -10,6 +12,10 @@ public static void testSort(Sort sorter) { assertArrayEquals(SORTED_BY_LOWEST_PRICE, sorter.sort(SORTED_BY_LOWEST_PRICE, SORTED_BY_LOWEST_PRICE.length)); assertArrayEquals(SORTED_BY_LOWEST_PRICE, sorter.sort(NOT_SORTED, NOT_SORTED.length)); assertArrayEquals(SAME_PRODUCT, sorter.sort(SAME_PRODUCT, SAME_PRODUCT.length)); + + // Make sure which original array it's not modified + sorter.sort(NOT_SORTED, NOT_SORTED.length); + assertFalse(Arrays.equals(SORTED_BY_LOWEST_PRICE, NOT_SORTED)); } } \ No newline at end of file From 585e970b8e0e9e4257e37572e2fc8e49118766ca Mon Sep 17 00:00:00 2001 From: zevolution Date: Fri, 5 Mar 2021 00:28:53 -0300 Subject: [PATCH 2/8] Added first step of the QuickSort --- .../sorting/quicksort/QuickSort.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/main/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSort.java diff --git a/src/main/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSort.java b/src/main/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSort.java new file mode 100644 index 0000000..8e88e88 --- /dev/null +++ b/src/main/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSort.java @@ -0,0 +1,35 @@ +package br.com.zevolution.algorithms.sorting.quicksort; + +import br.com.zevolution.algorithms.sorting.Product; + +public class QuickSort { + + public static void main(String[] args) { + + Product[] products = { + new Product("iMac", 30000), + new Product("Keyboard", 100), + new Product("iPhone 12 Pro Max Ultra Uou", 10000), + new Product("Mouse", 50), + new Product("Notebook", 3500) + }; + + getCheapests(products, products.length); + + } + + private static void getCheapests(Product[] products, int length) { + int cheapest = 0; + + for (int current = 0; current < length - 1; current++) { + Product currentProduct = products[current]; + if (currentProduct.getPrice() < products[length - 1].getPrice()) { + cheapest++; + } + } + + System.out.println(String.format("There are %d cheaper products.", cheapest)); + + } + +} From a7909fa603ac2ad30fa49de64ea15958fbb3cadd Mon Sep 17 00:00:00 2001 From: zevolution Date: Fri, 5 Mar 2021 00:54:42 -0300 Subject: [PATCH 3/8] Created method to swap cheapest items to the left side and most expensive to the right side of the pivot --- .../sorting/quicksort/QuickSort.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/main/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSort.java b/src/main/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSort.java index 8e88e88..d1e15f7 100644 --- a/src/main/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSort.java +++ b/src/main/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSort.java @@ -1,5 +1,7 @@ package br.com.zevolution.algorithms.sorting.quicksort; +import java.util.Arrays; + import br.com.zevolution.algorithms.sorting.Product; public class QuickSort { @@ -14,22 +16,34 @@ public static void main(String[] args) { new Product("Notebook", 3500) }; - getCheapests(products, products.length); + int cheapests = getCheapests(products, products.length); + System.out.println(String.format("There are %d cheaper products.", cheapests)); + System.out.println(Arrays.toString(products)); } - private static void getCheapests(Product[] products, int length) { + private static int getCheapests(Product[] products, int length) { int cheapest = 0; + Product pivotProduct = products[length - 1]; for (int current = 0; current < length - 1; current++) { Product currentProduct = products[current]; - if (currentProduct.getPrice() < products[length - 1].getPrice()) { + if (currentProduct.getPrice() < pivotProduct.getPrice()) { + swap(products, current, cheapest); cheapest++; } } - System.out.println(String.format("There are %d cheaper products.", cheapest)); + swap(products, length - 1, cheapest); + return cheapest; + } + + private static void swap(Product[] products, int from, int to) { + Product productFrom = products[from]; + Product productTo = products[to]; + products[from] = productTo; + products[to] = productFrom; } } From 7cf5ed7164505f69b73706bb99d59cd3138cd957 Mon Sep 17 00:00:00 2001 From: zevolution Date: Fri, 5 Mar 2021 01:40:43 -0300 Subject: [PATCH 4/8] Implemented recursive algorithms concept in QuickSort --- .../sorting/quicksort/QuickSort.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/main/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSort.java b/src/main/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSort.java index d1e15f7..8dcdfcd 100644 --- a/src/main/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSort.java +++ b/src/main/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSort.java @@ -16,25 +16,33 @@ public static void main(String[] args) { new Product("Notebook", 3500) }; - int cheapests = getCheapests(products, products.length); - System.out.println(String.format("There are %d cheaper products.", cheapests)); + quickSort(products, 0, products.length); System.out.println(Arrays.toString(products)); } - private static int getCheapests(Product[] products, int length) { - int cheapest = 0; + private static void quickSort(Product[] products, int start, int end) { + int length = end - start; + if (length > 1) { + int pivot = partitionProducts(products, start, end); + quickSort(products, start, pivot); + quickSort(products, pivot + 1, end); + } + } + + private static int partitionProducts(Product[] products, int start, int end) { + int cheapest = start; - Product pivotProduct = products[length - 1]; - for (int current = 0; current < length - 1; current++) { + Product pivotProduct = products[end - 1]; + for (int current = start; current < end - 1; current++) { Product currentProduct = products[current]; - if (currentProduct.getPrice() < pivotProduct.getPrice()) { + if (currentProduct.getPrice() <= pivotProduct.getPrice()) { swap(products, current, cheapest); cheapest++; } } - swap(products, length - 1, cheapest); + swap(products, end - 1, cheapest); return cheapest; } From 2e7ac147513157194c7197ef893653b51184ea29 Mon Sep 17 00:00:00 2001 From: zevolution Date: Sat, 6 Mar 2021 20:03:21 -0300 Subject: [PATCH 5/8] Conclusion of the custom implementation of QuickSort --- .../sorting/quicksort/QuickSort.java | 50 ++++++++----------- .../sorting/quicksort/QuickSortTest.java | 15 ++++++ 2 files changed, 36 insertions(+), 29 deletions(-) create mode 100644 src/test/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSortTest.java diff --git a/src/main/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSort.java b/src/main/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSort.java index 8dcdfcd..2dbff8f 100644 --- a/src/main/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSort.java +++ b/src/main/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSort.java @@ -1,57 +1,49 @@ package br.com.zevolution.algorithms.sorting.quicksort; -import java.util.Arrays; - import br.com.zevolution.algorithms.sorting.Product; +import br.com.zevolution.algorithms.sorting.Sort; + +public class QuickSort implements Sort { + + @Override + public Product[] sort(Product[] products, int length) { + Product[] array = products.clone(); + this.quickSort(array, 0, length); + return array; -public class QuickSort { - - public static void main(String[] args) { - - Product[] products = { - new Product("iMac", 30000), - new Product("Keyboard", 100), - new Product("iPhone 12 Pro Max Ultra Uou", 10000), - new Product("Mouse", 50), - new Product("Notebook", 3500) - }; - - quickSort(products, 0, products.length); - - System.out.println(Arrays.toString(products)); } - private static void quickSort(Product[] products, int start, int end) { + private void quickSort(Product[] products, int start, int end) { int length = end - start; if (length > 1) { - int pivot = partitionProducts(products, start, end); - quickSort(products, start, pivot); - quickSort(products, pivot + 1, end); + int pivot = this.partitionProducts(products, start, end); + this.quickSort(products, start, pivot); + this.quickSort(products, pivot + 1, end); } } - private static int partitionProducts(Product[] products, int start, int end) { + private int partitionProducts(Product[] products, int start, int end) { int cheapest = start; - + Product pivotProduct = products[end - 1]; for (int current = start; current < end - 1; current++) { Product currentProduct = products[current]; if (currentProduct.getPrice() <= pivotProduct.getPrice()) { - swap(products, current, cheapest); + this.swap(products, current, cheapest); cheapest++; } } - - swap(products, end - 1, cheapest); - + + this.swap(products, end - 1, cheapest); + return cheapest; } - private static void swap(Product[] products, int from, int to) { + private void swap(Product[] products, int from, int to) { Product productFrom = products[from]; Product productTo = products[to]; products[from] = productTo; products[to] = productFrom; } -} +} \ No newline at end of file diff --git a/src/test/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSortTest.java b/src/test/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSortTest.java new file mode 100644 index 0000000..15b096e --- /dev/null +++ b/src/test/java/br/com/zevolution/algorithms/sorting/quicksort/QuickSortTest.java @@ -0,0 +1,15 @@ +package br.com.zevolution.algorithms.sorting.quicksort; + +import static br.com.zevolution.algorithms.sorting.SortTester.testSort; +import static org.junit.Assert.*; + +import org.junit.Test; + +public class QuickSortTest { + + @Test + public void should_Sort_Array() { + testSort(new QuickSort()); + } + +} From 3a144156c5fb79f5b001a1060f5e42fac8585072 Mon Sep 17 00:00:00 2001 From: zevolution Date: Sun, 7 Mar 2021 20:57:52 -0300 Subject: [PATCH 6/8] Add pom.xml --- .gitignore | 1 + pom.xml | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 pom.xml diff --git a/.gitignore b/.gitignore index 1933432..149dcaf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .attach_pid* /src/target/ /src/.attach_pid* +/target !.mvn/wrapper/maven-wrapper.jar ### sts ### diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..79c812b --- /dev/null +++ b/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + br.com.zevolution + java-algorithms-and-datastructure + 0.0.1-SNAPSHOT + java-algorithms-and-datastructure + Algorithms and data structures implemented in Java + + + 1.8 + + + + + junit + junit + 4.12 + + + From c154319009f100df68a26f6bf392b59ccb84f674 Mon Sep 17 00:00:00 2001 From: zevolution Date: Sun, 7 Mar 2021 21:01:48 -0300 Subject: [PATCH 7/8] Add README --- README.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..468117b --- /dev/null +++ b/README.md @@ -0,0 +1,41 @@ +

+AlgoAndDataStruct-Logo +

Java Algorithms and Data Structures

+ +## Table of contents +- [About the project](#about-the-project) +- [Description](#description) +- [Built with](#built-with) +- [Installation](#installation) +- [Run](#run) +- [License](#license) + +## About the project +Basically, it's about algorithms and data structure and was created for the purpose of learning, researching, and recording all the content so that I can return when necessary. + +## Description +This project contains basic implementations using Java so that anyone can learn from examples. + +## Built with +* [Java 8](https://java.com/en/download/help/java8.html) +* [JUnit 4](https://junit.org/junit4/) +* [Maven](https://maven.apache.org/) + +## Installation + +To clone and run this application, you'll need Git installed on your computer(or no, if you want to download **.zip**). From your command line: +```bash +# Git CLI +git clone https://github.com/zevolution/java-algorithms-and-datastructure.git + +# Github CLI +gh repo clone zevolution/java-algorithms-and-datastructure +``` + +## Run +```bash +mvn test +``` + +## License +[MIT](https://choosealicense.com/licenses/mit/) \ No newline at end of file From bf457b387013e625a6a94981ad7c120d575b1840 Mon Sep 17 00:00:00 2001 From: zevolution Date: Mon, 15 Mar 2021 23:16:35 -0300 Subject: [PATCH 8/8] Added 'remove' method to remove by element in CustomLinkedList --- .../linkedlist/CustomLinkedList.java | 27 +++++++++++++++++++ .../linkedlist/CustomLinkedListTest.java | 14 ++++++++++ 2 files changed, 41 insertions(+) diff --git a/src/main/java/br/com/zevolution/datastructure/linkedlist/CustomLinkedList.java b/src/main/java/br/com/zevolution/datastructure/linkedlist/CustomLinkedList.java index 3954268..997996c 100644 --- a/src/main/java/br/com/zevolution/datastructure/linkedlist/CustomLinkedList.java +++ b/src/main/java/br/com/zevolution/datastructure/linkedlist/CustomLinkedList.java @@ -58,6 +58,33 @@ public void removeFirst() { } } + public void remove(Object element) { + Node current = this.first; + Node previous = null; + + if (current.getElement() == element) { + this.first = current.getNext(); + current = null; + this.totalElements--; + return; + } + + while (current != null) { + if (current.getElement() == element) { + break; + } + + previous = current; + current = current.getNext(); + } + + if (current == null) return; + + previous.setNext(current.getNext()); + current = null; + this.totalElements--; + } + public Object get(int position) { return this.getNode(position).getElement(); } diff --git a/src/test/java/br/com/zevolution/datastructure/linkedlist/CustomLinkedListTest.java b/src/test/java/br/com/zevolution/datastructure/linkedlist/CustomLinkedListTest.java index 1166a82..e3ee958 100644 --- a/src/test/java/br/com/zevolution/datastructure/linkedlist/CustomLinkedListTest.java +++ b/src/test/java/br/com/zevolution/datastructure/linkedlist/CustomLinkedListTest.java @@ -93,4 +93,18 @@ public void should_ThrowException_When_NoSuchElement() { linkedList.removeFirst(); } + @Test + public void should_RemoveMiddleElement() { + CustomLinkedList linkedList = new CustomLinkedList(); + linkedList.add("Bia"); + linkedList.add("Lucas"); + linkedList.add("Laura"); + + linkedList.remove("Lucas"); + + assertEquals(2, linkedList.size()); + assertEquals("Bia", linkedList.get(0)); + assertEquals("Laura", linkedList.get(1)); + } + }