diff --git a/src/main/java/com/williamfiset/algorithms/parallel/algorithm/Main.java b/src/main/java/com/williamfiset/algorithms/parallel/algorithm/Main.java new file mode 100644 index 000000000..8f8f5cfc1 --- /dev/null +++ b/src/main/java/com/williamfiset/algorithms/parallel/algorithm/Main.java @@ -0,0 +1,19 @@ +package com.williamfiset.algorithms.parallel.algorithm; + +import java.util.concurrent.ForkJoinPool; + +public class Main{ + + public static void main(String[] args) { + int[] arr = {7, 6, 5, 4, 3, 2, 1}; + + System.out.println("available processors = " + Runtime.getRuntime().availableProcessors()); + + ForkJoinPool pool = new ForkJoinPool(); + pool.invoke(new ParallelSorting(arr, 0, arr.length-1)); + + for (int num : arr){ + System.out.println(num); + } + } +} diff --git a/src/main/java/com/williamfiset/algorithms/parallel/algorithm/ParallelSorting.java b/src/main/java/com/williamfiset/algorithms/parallel/algorithm/ParallelSorting.java new file mode 100644 index 000000000..c0b9e1e6b --- /dev/null +++ b/src/main/java/com/williamfiset/algorithms/parallel/algorithm/ParallelSorting.java @@ -0,0 +1,41 @@ +package com.williamfiset.algorithms.parallel.algorithm; + +import java.util.concurrent.RecursiveAction; + +public class ParallelSorting extends RecursiveAction{ + + private final int[] arr; + private final int low; + private final int high; + + public ParallelSorting(int[] arr, int low, int high) { + this.arr = arr; + this.low = low; + this.high = high; + } + + @Override + protected void compute() { + if (low < high) { + int pivotIndex = partition(arr, low, high); + invokeAll(new ParallelSorting(arr, low, pivotIndex - 1), new ParallelSorting(arr, pivotIndex + 1, high)); + } + } + + private int partition(int[] arr, int low, int high) { + int pivot = arr[high]; + int i = low - 1; + for (int j = low; j < high; j++) { + if (arr[j] <= pivot) { + i++; + int temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; + } + } + int temp = arr[i + 1]; + arr[i + 1] = arr[high]; + arr[high] = temp; + return i + 1; + } +}