Advertisement
Guest User

Untitled

a guest
Jan 18th, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.59 KB | None | 0 0
  1. import java.util.Arrays;
  2.  
  3. /**
  4. * Created by Lesley on 18-1-2017.
  5. */
  6. @SuppressWarnings("Duplicates")
  7. public class BubbleSort4Threads {
  8.  
  9. private static int amount = 1000000;
  10. private static int[] part1 = new int[amount / 4];
  11. private static int[] part2 = new int[amount / 4];
  12. private static int[] part3 = new int[amount / 4];
  13. private static int[] part4 = new int[amount / 4];
  14. private static int[] mergeArray1 = new int[amount / 2];
  15. private static int[] mergeArray2 = new int[amount / 2];
  16. private static int[] mergeArray3 = new int[amount];
  17.  
  18. public static void main(String[] args) throws InterruptedException {
  19. Sorter s = new Sorter();
  20. int partOne = (int) (amount * 0.25);
  21. int partTwo = (int) (amount * 0.50);
  22. int partThree = (int) (amount * 0.75);
  23.  
  24. int[] array = s.randomArray(amount);
  25. part1 = Arrays.copyOfRange(array, 0, partOne);
  26. part2 = Arrays.copyOfRange(array, partOne, partTwo);
  27. part3 = Arrays.copyOfRange(array, partTwo, partThree);
  28. part4 = Arrays.copyOfRange(array, partThree, array.length);
  29.  
  30. long startTime = System.nanoTime();
  31. Thread t1 = new Thread(() -> {
  32. sortArray(part1.length, part1);
  33. });
  34. Thread t2 = new Thread(() -> {
  35. sortArray(part1.length, part2);
  36. });
  37. Thread t3 = new Thread(() -> {
  38. sortArray(part1.length, part3);
  39. });
  40. Thread t4 = new Thread(() -> {
  41. sortArray(part1.length, part4);
  42. });
  43.  
  44. t1.start();
  45. t2.start();
  46. t3.start();
  47. t4.start();
  48. t1.join();
  49. t2.join();
  50. t3.join();
  51. t4.join();
  52.  
  53. mergeArray(part1, part2, mergeArray1);
  54. mergeArray(part3, part4, mergeArray2);
  55. mergeArray(mergeArray1, mergeArray2, mergeArray3);
  56.  
  57. long endTime = System.nanoTime() - startTime;
  58. double seconds = (double) endTime / 1000000000.0;
  59. System.out.println("\nBubble Sorted Array - Parallel, took: " + seconds + " seconds");
  60.  
  61. System.out.println("+++++++++\n");
  62. for(int i : mergeArray3)
  63. System.out.print(i + " ");
  64. }
  65.  
  66. static private void sortArray(int n, int[] array) {
  67. int c, d, swap;
  68. for (c = 0; c < (n - 1); c++) {
  69. for (d = 0; d < n - c - 1; d++) {
  70. if (array[d] > array[d + 1]) /* For descending order use < */ {
  71. swap = array[d];
  72. array[d] = array[d + 1];
  73. array[d + 1] = swap;
  74. }
  75. }
  76. }
  77. }
  78.  
  79. static private int[] mergeArray(int[] part1, int[] part2, int[] mergeArray1) {
  80. int indexPart1 = 0;
  81. int indexPart2 = 0;
  82. int indexPart3 = 0;
  83.  
  84. while (indexPart1 < part1.length && indexPart2 < part2.length) {
  85. if (part1[indexPart1] < part2[indexPart2]) {
  86. mergeArray1[indexPart3] = part1[indexPart1];
  87. indexPart1++;
  88. } else {
  89. mergeArray1[indexPart3] = part2[indexPart2];
  90. indexPart2++;
  91. }
  92. indexPart3++;
  93. }
  94.  
  95. if (indexPart1 < part1.length) {
  96. for (int z = indexPart1; z < part1.length; z++, indexPart3++) {
  97. mergeArray1[indexPart3] = part1[z];
  98. }
  99. }
  100.  
  101. if (indexPart2 < part2.length) {
  102. for (int z = indexPart2; z < part2.length; z++, indexPart3++) {
  103. mergeArray1[indexPart3] = part2[z];
  104. }
  105. }
  106.  
  107. return mergeArray1;
  108. }
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement