JAVA-12097: renamed algorithms-module to algorithms-modules
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
package com.baeldung.algorithms.bynumber;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
public final class NaturalOrderComparators {
|
||||
|
||||
private static final String DIGIT_AND_DECIMAL_REGEX = "[^\\d.]";
|
||||
|
||||
private NaturalOrderComparators() {
|
||||
throw new AssertionError("Let's keep this static");
|
||||
}
|
||||
|
||||
public static Comparator<String> createNaturalOrderRegexComparator() {
|
||||
return Comparator.comparingDouble(NaturalOrderComparators::parseStringToNumber);
|
||||
}
|
||||
|
||||
private static double parseStringToNumber(String input){
|
||||
|
||||
final String digitsOnly = input.replaceAll(DIGIT_AND_DECIMAL_REGEX, "");
|
||||
|
||||
if("".equals(digitsOnly)) return 0;
|
||||
|
||||
try{
|
||||
return Double.parseDouble(digitsOnly);
|
||||
}catch (NumberFormatException nfe){
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.baeldung.algorithms.inoutsort;
|
||||
|
||||
public class InOutSort {
|
||||
|
||||
public static int[] reverseInPlace(int A[]) {
|
||||
int n = A.length;
|
||||
for (int i = 0; i < n / 2; i++) {
|
||||
int temp = A[i];
|
||||
A[i] = A[n - 1 - i];
|
||||
A[n - 1 - i] = temp;
|
||||
}
|
||||
|
||||
return A;
|
||||
}
|
||||
|
||||
public static int[] reverseOutOfPlace(int A[]) {
|
||||
int n = A.length;
|
||||
int[] B = new int[n];
|
||||
for (int i = 0; i < n; i++) {
|
||||
B[n - i - 1] = A[i];
|
||||
}
|
||||
|
||||
return B;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
package com.baeldung.algorithms.quicksort;
|
||||
|
||||
import static com.baeldung.algorithms.quicksort.SortingUtils.swap;
|
||||
|
||||
public class BentleyMcIlroyPartioning {
|
||||
|
||||
public static Partition partition(int input[], int begin, int end) {
|
||||
int left = begin, right = end;
|
||||
int leftEqualKeysCount = 0, rightEqualKeysCount = 0;
|
||||
|
||||
int partitioningValue = input[end];
|
||||
|
||||
while (true) {
|
||||
while (input[left] < partitioningValue)
|
||||
left++;
|
||||
|
||||
while (input[right] > partitioningValue) {
|
||||
if (right == begin)
|
||||
break;
|
||||
right--;
|
||||
}
|
||||
|
||||
if (left == right && input[left] == partitioningValue) {
|
||||
swap(input, begin + leftEqualKeysCount, left);
|
||||
leftEqualKeysCount++;
|
||||
left++;
|
||||
}
|
||||
|
||||
if (left >= right) {
|
||||
break;
|
||||
}
|
||||
|
||||
swap(input, left, right);
|
||||
|
||||
if (input[left] == partitioningValue) {
|
||||
swap(input, begin + leftEqualKeysCount, left);
|
||||
leftEqualKeysCount++;
|
||||
}
|
||||
|
||||
if (input[right] == partitioningValue) {
|
||||
swap(input, right, end - rightEqualKeysCount);
|
||||
rightEqualKeysCount++;
|
||||
}
|
||||
left++; right--;
|
||||
}
|
||||
right = left - 1;
|
||||
for (int k = begin; k < begin + leftEqualKeysCount; k++, right--) {
|
||||
if (right >= begin + leftEqualKeysCount)
|
||||
swap(input, k, right);
|
||||
}
|
||||
for (int k = end; k > end - rightEqualKeysCount; k--, left++) {
|
||||
if (left <= end - rightEqualKeysCount)
|
||||
swap(input, left, k);
|
||||
}
|
||||
return new Partition(right + 1, left - 1);
|
||||
}
|
||||
|
||||
public static void quicksort(int input[], int begin, int end) {
|
||||
if (end <= begin)
|
||||
return;
|
||||
Partition middlePartition = partition(input, begin, end);
|
||||
quicksort(input, begin, middlePartition.getLeft() - 1);
|
||||
quicksort(input, middlePartition.getRight() + 1, end);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.baeldung.algorithms.quicksort;
|
||||
|
||||
import static com.baeldung.algorithms.quicksort.SortingUtils.compare;
|
||||
import static com.baeldung.algorithms.quicksort.SortingUtils.swap;
|
||||
|
||||
public class DutchNationalFlagPartioning {
|
||||
|
||||
public static Partition partition(int[] input, int begin, int end) {
|
||||
int lt = begin, current = begin, gt = end;
|
||||
int partitioningValue = input[begin];
|
||||
|
||||
while (current <= gt) {
|
||||
int compareCurrent = compare(input[current], partitioningValue);
|
||||
switch (compareCurrent) {
|
||||
case -1:
|
||||
swap(input, current++, lt++);
|
||||
break;
|
||||
case 0:
|
||||
current++;
|
||||
break;
|
||||
case 1:
|
||||
swap(input, current, gt--);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return new Partition(lt, gt);
|
||||
}
|
||||
|
||||
public static void quicksort(int[] input, int begin, int end) {
|
||||
if (end <= begin)
|
||||
return;
|
||||
|
||||
Partition middlePartition = partition(input, begin, end);
|
||||
|
||||
quicksort(input, begin, middlePartition.getLeft() - 1);
|
||||
quicksort(input, middlePartition.getRight() + 1, end);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.baeldung.algorithms.quicksort;
|
||||
|
||||
public class Partition {
|
||||
private int left;
|
||||
private int right;
|
||||
|
||||
public Partition(int left, int right) {
|
||||
super();
|
||||
this.left = left;
|
||||
this.right = right;
|
||||
}
|
||||
|
||||
public int getLeft() {
|
||||
return left;
|
||||
}
|
||||
|
||||
public void setLeft(int left) {
|
||||
this.left = left;
|
||||
}
|
||||
|
||||
public int getRight() {
|
||||
return right;
|
||||
}
|
||||
|
||||
public void setRight(int right) {
|
||||
this.right = right;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.baeldung.algorithms.quicksort;
|
||||
|
||||
public class SortingUtils {
|
||||
|
||||
public static void swap(int[] array, int position1, int position2) {
|
||||
if (position1 != position2) {
|
||||
int temp = array[position1];
|
||||
array[position1] = array[position2];
|
||||
array[position2] = temp;
|
||||
}
|
||||
}
|
||||
|
||||
public static int compare(int num1, int num2) {
|
||||
if (num1 > num2)
|
||||
return 1;
|
||||
else if (num1 < num2)
|
||||
return -1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static void printArray(int[] array) {
|
||||
if (array == null) {
|
||||
return;
|
||||
}
|
||||
for (int e : array) {
|
||||
System.out.print(e + " ");
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.baeldung.algorithms.stringsort;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class AnagramValidator {
|
||||
|
||||
public static boolean isValid(String text, String anagram) {
|
||||
text = prepare(text);
|
||||
anagram = prepare(anagram);
|
||||
|
||||
String sortedText = sort(text);
|
||||
String sortedAnagram = sort(anagram);
|
||||
|
||||
return sortedText.equals(sortedAnagram);
|
||||
}
|
||||
|
||||
private static String sort(String text) {
|
||||
char[] chars = prepare(text).toCharArray();
|
||||
|
||||
Arrays.sort(chars);
|
||||
return new String(chars);
|
||||
}
|
||||
|
||||
private static String prepare(String text) {
|
||||
return text.toLowerCase()
|
||||
.trim()
|
||||
.replaceAll("\\s+", "");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
|
||||
</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<root level="INFO">
|
||||
<appender-ref ref="STDOUT"/>
|
||||
</root>
|
||||
</configuration>
|
||||
Reference in New Issue
Block a user