Skip to content

StalinSort.java #5738

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 56 commits into from
Oct 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
924b5de
Create StalinSort.java
anant-jain01 Oct 12, 2024
bed6b83
Create StalinSortTest.java
anant-jain01 Oct 12, 2024
ae3b9d1
Update pom.xml
anant-jain01 Oct 12, 2024
ca18ef8
Update pom.xml
anant-jain01 Oct 12, 2024
60cd02f
Update pom.xml
anant-jain01 Oct 12, 2024
ac7b48f
Update StalinSortTest.java
anant-jain01 Oct 12, 2024
e7f7e3b
Update StalinSortTest.java
anant-jain01 Oct 12, 2024
450b6c8
Update StalinSort.java
anant-jain01 Oct 12, 2024
92527fb
Update StalinSortTest.java
anant-jain01 Oct 12, 2024
cf2374d
Update StalinSortTest.java
anant-jain01 Oct 12, 2024
4eb8ce7
Update StalinSortTest.java
anant-jain01 Oct 12, 2024
3104b11
Update StalinSortTest.java
anant-jain01 Oct 12, 2024
efccc4a
Update StalinSortTest.java
anant-jain01 Oct 12, 2024
10f97f0
Update StalinSortTest.java
anant-jain01 Oct 12, 2024
9722f7f
Update StalinSortTest.java
anant-jain01 Oct 12, 2024
6acf621
Update StalinSort.java
anant-jain01 Oct 12, 2024
eebe41c
Update StalinSortTest.java
anant-jain01 Oct 12, 2024
d185e9c
Merge branch 'master' into master
anant-jain01 Oct 12, 2024
00a6f78
Update StalinSortTest.java
anant-jain01 Oct 12, 2024
4e42137
Update StalinSort.java
anant-jain01 Oct 12, 2024
a022b6a
Update pom.xml
anant-jain01 Oct 12, 2024
3d7b1b6
Update StalinSort.java
anant-jain01 Oct 12, 2024
e6f271a
Update StalinSortTest.java
anant-jain01 Oct 12, 2024
fceee06
Update pom.xml
anant-jain01 Oct 12, 2024
c650a9b
Update pom.xml
anant-jain01 Oct 12, 2024
b84af74
Update StalinSortTest.java
anant-jain01 Oct 12, 2024
d0b7113
Update StalinSort.java
anant-jain01 Oct 12, 2024
490b879
Update pom.xml
anant-jain01 Oct 12, 2024
08aae77
Update pom.xml
anant-jain01 Oct 12, 2024
9926906
Update StalinSortTest.java
anant-jain01 Oct 12, 2024
6cdebe2
Update StalinSort.java
anant-jain01 Oct 12, 2024
4e6a279
Update StalinSortTest.java
anant-jain01 Oct 12, 2024
c4982a0
Update pom.xml
anant-jain01 Oct 12, 2024
2f1a6ff
Update StalinSortTest.java
anant-jain01 Oct 12, 2024
9c1f40f
Update pom.xml
anant-jain01 Oct 12, 2024
6952bb1
Update pom.xml
anant-jain01 Oct 12, 2024
f740fde
Update pom.xml
anant-jain01 Oct 12, 2024
daf86c2
Update StalinSort.java
anant-jain01 Oct 12, 2024
c0ad91f
Update pom.xml
anant-jain01 Oct 12, 2024
dc274b6
Update StalinSortTest.java
anant-jain01 Oct 12, 2024
822dbe8
Update StalinSortTest.java
anant-jain01 Oct 12, 2024
9b485b7
Create AdaptiveMergeSort.java
anant-jain01 Oct 12, 2024
520792b
Create AdaptiveMergeSortTest.java
anant-jain01 Oct 12, 2024
51172f7
Update AdaptiveMergeSort.java
anant-jain01 Oct 12, 2024
8770502
Update AdaptiveMergeSort.java
anant-jain01 Oct 12, 2024
19f83d9
Update AdaptiveMergeSortTest.java
anant-jain01 Oct 12, 2024
31c386a
Update AdaptiveMergeSort.java
anant-jain01 Oct 12, 2024
428f96e
Update AdaptiveMergeSort.java
anant-jain01 Oct 12, 2024
0a550c1
Update AdaptiveMergeSort.java
anant-jain01 Oct 12, 2024
44c2856
Update AdaptiveMergeSort.java
anant-jain01 Oct 12, 2024
eacb7f2
Update AdaptiveMergeSort.java
anant-jain01 Oct 12, 2024
7cf4bdb
Update AdaptiveMergeSort.java
anant-jain01 Oct 12, 2024
be7d4ff
Update AdaptiveMergeSort.java
anant-jain01 Oct 15, 2024
bff1ecb
Update StalinSort.java
anant-jain01 Oct 15, 2024
f95b22e
Merge branch 'master' into master
anant-jain01 Oct 16, 2024
5ae799a
Merge branch 'master' into master
siriak Oct 22, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions src/main/java/com/thealgorithms/sorts/AdaptiveMergeSort.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.thealgorithms.sorts;

public class AdaptiveMergeSort implements SortAlgorithm {
@SuppressWarnings("unchecked")
public <T extends Comparable<T>> T[] sort(T[] array) {
if (array.length <= 1) {
return array;
}
T[] aux = array.clone();
sort(array, aux, 0, array.length - 1);
return array;
}

private <T extends Comparable<T>> void sort(T[] array, T[] aux, int low, int high) {
if (low >= high) {
return;
}
int mid = low + (high - low) / 2;
sort(array, aux, low, mid);
sort(array, aux, mid + 1, high);
merge(array, aux, low, mid, high);
}

private <T extends Comparable<T>> void merge(T[] array, T[] aux, int low, int mid, int high) {
System.arraycopy(array, low, aux, low, high - low + 1);
int i = low;
int j = mid + 1;
for (int k = low; k <= high; k++) {
if (i > mid) {
array[k] = aux[j++];
} else if (j > high) {
array[k] = aux[i++];
} else if (aux[j].compareTo(aux[i]) < 0) {
array[k] = aux[j++];
} else {
array[k] = aux[i++];
}
}
}
}
21 changes: 21 additions & 0 deletions src/main/java/com/thealgorithms/sorts/StalinSort.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.thealgorithms.sorts;

public class StalinSort implements SortAlgorithm {
@SuppressWarnings("unchecked")
public <T extends Comparable<T>> T[] sort(T[] array) {
if (array.length == 0) {
return array;
}
int currentIndex = 0;
for (int i = 1; i < array.length; i++) {
if (array[i].compareTo(array[currentIndex]) >= 0) {
currentIndex++;
array[currentIndex] = array[i];
}
}
// Create a result array with sorted elements
T[] result = (T[]) java.lang.reflect.Array.newInstance(array.getClass().getComponentType(), currentIndex + 1);
System.arraycopy(array, 0, result, 0, currentIndex + 1);
return result;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.thealgorithms.sorts;

import static org.junit.jupiter.api.Assertions.assertArrayEquals;

import org.junit.jupiter.api.Test;

public class AdaptiveMergeSortTest {

@Test
public void testSortIntegers() {
AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort();
Integer[] input = {4, 23, 6, 78, 1, 54, 231, 9, 12};
Integer[] expected = {1, 4, 6, 9, 12, 23, 54, 78, 231};
Integer[] result = adaptiveMergeSort.sort(input);
assertArrayEquals(expected, result);
}

@Test
public void testSortStrings() {
AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort();
String[] input = {"c", "a", "e", "b", "d"};
String[] expected = {"a", "b", "c", "d", "e"};
String[] result = adaptiveMergeSort.sort(input);
assertArrayEquals(expected, result);
}

@Test
public void testSortWithDuplicates() {
AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort();
Integer[] input = {1, 3, 2, 2, 5, 4};
Integer[] expected = {1, 2, 2, 3, 4, 5};
Integer[] result = adaptiveMergeSort.sort(input);
assertArrayEquals(expected, result);
}

@Test
public void testSortEmptyArray() {
AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort();
Integer[] input = {};
Integer[] expected = {};
Integer[] result = adaptiveMergeSort.sort(input);
assertArrayEquals(expected, result);
}

@Test
public void testSortSingleElement() {
AdaptiveMergeSort adaptiveMergeSort = new AdaptiveMergeSort();
Integer[] input = {42};
Integer[] expected = {42};
Integer[] result = adaptiveMergeSort.sort(input);
assertArrayEquals(expected, result);
}
}
53 changes: 53 additions & 0 deletions src/test/java/com/thealgorithms/sorts/StalinSortTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.thealgorithms.sorts;

import static org.junit.jupiter.api.Assertions.assertArrayEquals;

import org.junit.jupiter.api.Test;

public class StalinSortTest {

@Test
public void testSortIntegers() {
StalinSort stalinSort = new StalinSort();
Integer[] input = {4, 23, 6, 78, 1, 54, 231, 9, 12};
Integer[] expected = {4, 23, 78, 231};
Integer[] result = stalinSort.sort(input);
assertArrayEquals(expected, result);
}

@Test
public void testSortStrings() {
StalinSort stalinSort = new StalinSort();
String[] input = {"c", "a", "e", "b", "d"};
String[] expected = {"c", "e"};
String[] result = stalinSort.sort(input);
assertArrayEquals(expected, result);
}

@Test
public void testSortWithDuplicates() {
StalinSort stalinSort = new StalinSort();
Integer[] input = {1, 3, 2, 2, 5, 4};
Integer[] expected = {1, 3, 5};
Integer[] result = stalinSort.sort(input);
assertArrayEquals(expected, result);
}

@Test
public void testSortEmptyArray() {
StalinSort stalinSort = new StalinSort();
Integer[] input = {};
Integer[] expected = {};
Integer[] result = stalinSort.sort(input);
assertArrayEquals(expected, result);
}

@Test
public void testSortSingleElement() {
StalinSort stalinSort = new StalinSort();
Integer[] input = {42};
Integer[] expected = {42};
Integer[] result = stalinSort.sort(input);
assertArrayEquals(expected, result);
}
}