Skip to content

Commit 7aa1421

Browse files
committed
Merge branch 'Branch_Smooth_Sort' of github.com:JAPNITSINGH/Java into Branch_Smooth_Sort
2 parents 79a5d20 + 9fe137c commit 7aa1421

22 files changed

+339
-195
lines changed

.gitpod.dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM gitpod/workspace-java-21:2024-06-24-08-46-07
1+
FROM gitpod/workspace-java-21:2024-06-26-08-49-45
22

33
ENV LLVM_SCRIPT="tmp_llvm.sh"
44

DIRECTORY.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@
490490
* [BitonicSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/BitonicSort.java)
491491
* [BogoSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/BogoSort.java)
492492
* [BubbleSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/BubbleSort.java)
493-
* [BubbleSortRecursion](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/BubbleSortRecursion.java)
493+
* [BubbleSortRecursive](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/BubbleSortRecursive.java)
494494
* [BucketSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/BucketSort.java)
495495
* [CircleSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/CircleSort.java)
496496
* [CocktailShakerSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/CocktailShakerSort.java)
@@ -515,6 +515,7 @@
515515
* [QuickSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/QuickSort.java)
516516
* [RadixSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/RadixSort.java)
517517
* [SelectionSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/SelectionSort.java)
518+
* [SelectionSortRecursive](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/SelectionSortRecursive.java)
518519
* [ShellSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/ShellSort.java)
519520
* [SimpleSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/SimpleSort.java)
520521
* [SlowSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/SlowSort.java)
@@ -528,6 +529,7 @@
528529
* [TopologicalSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/TopologicalSort.java)
529530
* [TreeSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/TreeSort.java)
530531
* [WiggleSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/WiggleSort.java)
532+
* [WaveSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/WaveSort.java)
531533
* stacks
532534
* [BalancedBrackets](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/stacks/BalancedBrackets.java)
533535
* [DecimalToAnyUsingStack](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/stacks/DecimalToAnyUsingStack.java)
@@ -857,6 +859,7 @@
857859
* [BinaryInsertionSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/BinaryInsertionSortTest.java)
858860
* [BogoSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/BogoSortTest.java)
859861
* [BubbleSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/BubbleSortTest.java)
862+
* [BubbleSortRecursiveTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/BubbleSortRecursiveTest.java)
860863
* [BucketSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/BucketSortTest.java)
861864
* [CircleSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/CircleSortTest.java)
862865
* [CocktailShakerSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/CocktailShakerSortTest.java)
@@ -874,6 +877,7 @@
874877
* [PancakeSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/PancakeSortTest.java)
875878
* [QuickSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/QuickSortTest.java)
876879
* [SelectionSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/SelectionSortTest.java)
880+
* [SelectionSortRecursiveTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/SelectionSortRecursiveTest.java)
877881
* [ShellSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/ShellSortTest.java)
878882
* [SimpleSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/SimpleSortTest.java)
879883
* [SlowSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/SlowSortTest.java)
@@ -885,6 +889,7 @@
885889
* [TopologicalSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/TopologicalSortTest.java)
886890
* [TreeSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/TreeSortTest.java)
887891
* [WiggleSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/WiggleSortTest.java)
892+
* [WaveSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/WaveSortTest.java)
888893
* stacks
889894
* [StackPostfixNotationTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/stacks/StackPostfixNotationTest.java)
890895
* strings

pmd-exclude.properties

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ com.thealgorithms.searches.InterpolationSearch=UselessParentheses
7676
com.thealgorithms.searches.KMPSearch=UselessParentheses
7777
com.thealgorithms.searches.LinearSearchThread=EmptyCatchBlock
7878
com.thealgorithms.searches.RabinKarpAlgorithm=UselessParentheses
79-
com.thealgorithms.sorts.BubbleSortRecursion=UselessParentheses
8079
com.thealgorithms.sorts.CircleSort=EmptyControlStatement
8180
com.thealgorithms.sorts.CombSort=UselessParentheses
8281
com.thealgorithms.sorts.DutchNationalFlagSort=UselessParentheses

pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<dependency>
2121
<groupId>org.junit</groupId>
2222
<artifactId>junit-bom</artifactId>
23-
<version>5.10.2</version>
23+
<version>5.10.3</version>
2424
<type>pom</type>
2525
<scope>import</scope>
2626
</dependency>
@@ -31,7 +31,7 @@
3131
<dependency>
3232
<groupId>org.junit.jupiter</groupId>
3333
<artifactId>junit-jupiter</artifactId>
34-
<version>5.10.2</version>
34+
<version>5.10.3</version>
3535
<scope>test</scope>
3636
</dependency>
3737
<dependency>
@@ -44,7 +44,7 @@
4444
<dependency>
4545
<groupId>org.junit.jupiter</groupId>
4646
<artifactId>junit-jupiter-api</artifactId>
47-
<version>5.10.2</version>
47+
<version>5.10.3</version>
4848
<scope>test</scope>
4949
</dependency>
5050
<dependency>
@@ -125,7 +125,7 @@
125125
<plugin>
126126
<groupId>com.github.spotbugs</groupId>
127127
<artifactId>spotbugs-maven-plugin</artifactId>
128-
<version>4.8.5.0</version>
128+
<version>4.8.6.1</version>
129129
<configuration>
130130
<excludeFilterFile>spotbugs-exclude.xml</excludeFilterFile>
131131
<includeTests>true</includeTests>

spotbugs-exclude.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,6 @@
8989
<Match>
9090
<Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE" />
9191
</Match>
92-
<Match>
93-
<Bug pattern="RV_ABSOLUTE_VALUE_OF_HASHCODE" />
94-
</Match>
9592
<!-- fb-contrib -->
9693
<Match>
9794
<Bug pattern="OCP_OVERLY_CONCRETE_PARAMETER" />
@@ -126,9 +123,6 @@
126123
<Match>
127124
<Bug pattern="BL_BURYING_LOGIC" />
128125
</Match>
129-
<Match>
130-
<Bug pattern="OI_OPTIONAL_ISSUES_USES_IMMEDIATE_EXECUTION" />
131-
</Match>
132126
<Match>
133127
<Bug pattern="PCOA_PARTIALLY_CONSTRUCTED_OBJECT_ACCESS" />
134128
</Match>

src/main/java/com/thealgorithms/datastructures/hashmap/hashing/GenericHashMapUsingArray.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@ public void put(K key, V value) {
4747

4848
// tells which bucket to go to
4949
private int hashFunction(K key) {
50-
int hc = key.hashCode();
51-
return Math.abs(hc) % buckets.length;
50+
return Math.floorMod(key.hashCode(), buckets.length);
5251
}
5352

5453
private void reHash() {

src/main/java/com/thealgorithms/sorts/BeadSort.java

Lines changed: 41 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,59 @@
11
package com.thealgorithms.sorts;
22

3-
// BeadSort Algorithm(wikipedia) : https://en.wikipedia.org/wiki/Bead_sort
4-
// BeadSort can't sort negative number, Character, String. It can sort positive number only
3+
import java.util.Arrays;
54

65
public class BeadSort {
7-
public int[] sort(int[] unsorted) {
8-
int[] sorted = new int[unsorted.length];
9-
int max = 0;
10-
for (int i = 0; i < unsorted.length; i++) {
11-
max = Math.max(max, unsorted[i]);
12-
}
6+
private enum BeadState { BEAD, EMPTY }
137

14-
char[][] grid = new char[unsorted.length][max];
15-
int[] count = new int[max];
8+
/**
9+
* Sorts the given array using the BeadSort algorithm.
10+
*
11+
* @param array The array of non-negative integers to be sorted.
12+
* @return The sorted array.
13+
* @throws IllegalArgumentException If the array contains negative numbers.
14+
*/
15+
public int[] sort(int[] array) {
16+
allInputsMustBeNonNegative(array);
17+
return extractSortedFromGrid(fillGrid(array));
18+
}
1619

17-
for (int i = 0; i < unsorted.length; i++) {
18-
for (int j = 0; j < max; j++) {
19-
grid[i][j] = '-';
20-
}
20+
private void allInputsMustBeNonNegative(final int[] array) {
21+
if (Arrays.stream(array).anyMatch(s -> s < 0)) {
22+
throw new IllegalArgumentException("BeadSort cannot sort negative numbers.");
2123
}
24+
}
2225

23-
for (int i = 0; i < max; i++) {
24-
count[i] = 0;
25-
}
26+
private BeadState[][] fillGrid(final int[] array) {
27+
final var maxValue = Arrays.stream(array).max().orElse(0);
28+
var grid = getEmptyGrid(array.length, maxValue);
2629

27-
for (int i = 0; i < unsorted.length; i++) {
30+
int[] count = new int[maxValue];
31+
for (int i = 0, arrayLength = array.length; i < arrayLength; i++) {
2832
int k = 0;
29-
for (int j = 0; j < unsorted[i]; j++) {
30-
grid[count[max - k - 1]++][k] = '*';
33+
for (int j = 0; j < array[i]; j++) {
34+
grid[count[maxValue - k - 1]++][k] = BeadState.BEAD;
3135
k++;
3236
}
3337
}
38+
return grid;
39+
}
40+
41+
private BeadState[][] getEmptyGrid(final int arrayLength, final int maxValue) {
42+
BeadState[][] grid = new BeadState[arrayLength][maxValue];
43+
for (int i = 0; i < arrayLength; i++) {
44+
for (int j = 0; j < maxValue; j++) {
45+
grid[i][j] = BeadState.EMPTY;
46+
}
47+
}
48+
49+
return grid;
50+
}
3451

35-
for (int i = 0; i < unsorted.length; i++) {
52+
private int[] extractSortedFromGrid(final BeadState[][] grid) {
53+
int[] sorted = new int[grid.length];
54+
for (int i = 0; i < grid.length; i++) {
3655
int k = 0;
37-
for (int j = 0; j < max && grid[unsorted.length - 1 - i][j] == '*'; j++) {
56+
for (int j = 0; j < grid[grid.length - 1 - i].length && grid[grid.length - 1 - i][j] == BeadState.BEAD; j++) {
3857
k++;
3958
}
4059
sorted[i] = k;

src/main/java/com/thealgorithms/sorts/BubbleSortRecursion.java

Lines changed: 0 additions & 57 deletions
This file was deleted.
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.thealgorithms.sorts;
2+
3+
/**
4+
* BubbleSort algorithm implemented using recursion
5+
*/
6+
public class BubbleSortRecursive implements SortAlgorithm {
7+
/**
8+
* @param array - an array should be sorted
9+
* @return sorted array
10+
*/
11+
@Override
12+
public <T extends Comparable<T>> T[] sort(T[] array) {
13+
bubbleSort(array, array.length);
14+
return array;
15+
}
16+
17+
/**
18+
* BubbleSort algorithm implements using recursion
19+
*
20+
* @param array array contains elements
21+
* @param len length of given array
22+
*/
23+
private static <T extends Comparable<T>> void bubbleSort(T[] array, int len) {
24+
boolean swapped = false;
25+
for (int i = 0; i < len - 1; ++i) {
26+
if (SortUtils.greater(array[i], array[i + 1])) {
27+
SortUtils.swap(array, i, i + 1);
28+
swapped = true;
29+
}
30+
}
31+
if (swapped) {
32+
bubbleSort(array, len - 1);
33+
}
34+
}
35+
}
Lines changed: 18 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,31 @@
11
package com.thealgorithms.sorts;
22

33
public class SelectionSort implements SortAlgorithm {
4-
54
/**
6-
* Generic selection sort algorithm in increasing order.
5+
* Sorts an array of comparable elements in increasing order using the selection sort algorithm.
76
*
8-
* @param arr the array to be sorted.
9-
* @param <T> the class of array.
10-
* @return sorted array.
7+
* @param array the array to be sorted
8+
* @param <T> the class of array elements
9+
* @return the sorted array
1110
*/
1211
@Override
13-
public <T extends Comparable<T>> T[] sort(T[] arr) {
14-
int n = arr.length;
15-
for (int i = 0; i < n - 1; i++) {
16-
int minIndex = i;
17-
for (int j = i + 1; j < n; j++) {
18-
if (arr[minIndex].compareTo(arr[j]) > 0) {
19-
minIndex = j;
20-
}
21-
}
22-
if (minIndex != i) {
23-
SortUtils.swap(arr, i, minIndex);
24-
}
25-
}
26-
return arr;
27-
}
12+
public <T extends Comparable<T>> T[] sort(T[] array) {
13+
// One by one move the boundary of the unsorted subarray
14+
for (int i = 0; i < array.length - 1; i++) {
2815

29-
/**
30-
* Driver Code
31-
*/
32-
public static void main(String[] args) {
33-
Integer[] arr = {4, 23, 6, 78, 1, 54, 231, 9, 12};
34-
SelectionSort selectionSort = new SelectionSort();
35-
Integer[] sorted = selectionSort.sort(arr);
36-
for (int i = 0; i < sorted.length - 1; ++i) {
37-
assert sorted[i] <= sorted[i + 1];
16+
// Swap the remaining minimum element with the current element
17+
SortUtils.swap(array, i, findIndexOfMin(array, i));
3818
}
19+
return array;
20+
}
3921

40-
String[] strings = {"c", "a", "e", "b", "d"};
41-
String[] sortedStrings = selectionSort.sort(strings);
42-
for (int i = 0; i < sortedStrings.length - 1; ++i) {
43-
assert strings[i].compareTo(strings[i + 1]) <= 0;
22+
private static <T extends Comparable<T>> int findIndexOfMin(T[] array, final int start) {
23+
int minIndex = start;
24+
for (int i = start + 1; i < array.length; i++) {
25+
if (array[i].compareTo(array[minIndex]) < 0) {
26+
minIndex = i;
27+
}
4428
}
29+
return minIndex;
4530
}
4631
}

0 commit comments

Comments
 (0)