Add StalinSort (#5738)

This commit is contained in:
ANANT JAIN
2024-10-22 23:02:51 +05:30
committed by GitHub
parent c440c1d69e
commit 69a1424415
4 changed files with 167 additions and 0 deletions

View File

@ -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++];
}
}
}
}

View File

@ -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;
}
}