Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Arrays;
- /**
- * Created by Lesley on 18-1-2017.
- */
- @SuppressWarnings("Duplicates")
- public class BubbleSort4Threads {
- private static int amount = 1000000;
- private static int[] part1 = new int[amount / 4];
- private static int[] part2 = new int[amount / 4];
- private static int[] part3 = new int[amount / 4];
- private static int[] part4 = new int[amount / 4];
- private static int[] mergeArray1 = new int[amount / 2];
- private static int[] mergeArray2 = new int[amount / 2];
- private static int[] mergeArray3 = new int[amount];
- public static void main(String[] args) throws InterruptedException {
- Sorter s = new Sorter();
- int partOne = (int) (amount * 0.25);
- int partTwo = (int) (amount * 0.50);
- int partThree = (int) (amount * 0.75);
- int[] array = s.randomArray(amount);
- part1 = Arrays.copyOfRange(array, 0, partOne);
- part2 = Arrays.copyOfRange(array, partOne, partTwo);
- part3 = Arrays.copyOfRange(array, partTwo, partThree);
- part4 = Arrays.copyOfRange(array, partThree, array.length);
- long startTime = System.nanoTime();
- Thread t1 = new Thread(() -> {
- sortArray(part1.length, part1);
- });
- Thread t2 = new Thread(() -> {
- sortArray(part1.length, part2);
- });
- Thread t3 = new Thread(() -> {
- sortArray(part1.length, part3);
- });
- Thread t4 = new Thread(() -> {
- sortArray(part1.length, part4);
- });
- t1.start();
- t2.start();
- t3.start();
- t4.start();
- t1.join();
- t2.join();
- t3.join();
- t4.join();
- mergeArray(part1, part2, mergeArray1);
- mergeArray(part3, part4, mergeArray2);
- mergeArray(mergeArray1, mergeArray2, mergeArray3);
- long endTime = System.nanoTime() - startTime;
- double seconds = (double) endTime / 1000000000.0;
- System.out.println("\nBubble Sorted Array - Parallel, took: " + seconds + " seconds");
- System.out.println("+++++++++\n");
- for(int i : mergeArray3)
- System.out.print(i + " ");
- }
- static private void sortArray(int n, int[] array) {
- int c, d, swap;
- for (c = 0; c < (n - 1); c++) {
- for (d = 0; d < n - c - 1; d++) {
- if (array[d] > array[d + 1]) /* For descending order use < */ {
- swap = array[d];
- array[d] = array[d + 1];
- array[d + 1] = swap;
- }
- }
- }
- }
- static private int[] mergeArray(int[] part1, int[] part2, int[] mergeArray1) {
- int indexPart1 = 0;
- int indexPart2 = 0;
- int indexPart3 = 0;
- while (indexPart1 < part1.length && indexPart2 < part2.length) {
- if (part1[indexPart1] < part2[indexPart2]) {
- mergeArray1[indexPart3] = part1[indexPart1];
- indexPart1++;
- } else {
- mergeArray1[indexPart3] = part2[indexPart2];
- indexPart2++;
- }
- indexPart3++;
- }
- if (indexPart1 < part1.length) {
- for (int z = indexPart1; z < part1.length; z++, indexPart3++) {
- mergeArray1[indexPart3] = part1[z];
- }
- }
- if (indexPart2 < part2.length) {
- for (int z = indexPart2; z < part2.length; z++, indexPart3++) {
- mergeArray1[indexPart3] = part2[z];
- }
- }
- return mergeArray1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement