Advertisement
Guest User

Untitled

a guest
Nov 27th, 2015
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.30 KB | None | 0 0
  1. package op1_concurrency;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Random;
  6.  
  7. public class RecursiveSort {
  8. private Random rng = new Random();
  9.  
  10. public static void main(String[] args) {
  11. RecursiveSort op3 = new RecursiveSort();
  12. ArrayList<Integer> list = op3.randomlist(0, 64);
  13. // ArrayList<Integer> list2 = randomlist(0, 50000);
  14. // ArrayList<Integer> list3 = randomlist(0, 100000);
  15. // ArrayList<Integer> list4 = randomlist(0, 200000);
  16. // ArrayList<Integer> list5 = randomlist(0, 400000);
  17. // ArrayList<Integer> list6 = randomlist(0, 800000);
  18. // System.out.println(testtijd(list));
  19. // System.out.println(testtijd(list2));
  20. // System.out.println(testtijd(list3));
  21. // System.out.println(testtijd(list4));
  22. // System.out.println(testtijd(list5));
  23. // System.out.println(testtijd(list6));
  24.  
  25. System.out.println(op3.recursiveSort(list).toString());
  26.  
  27. }
  28.  
  29. protected static List<Integer> recursiveSort(List<Integer> recursivelist) {
  30.  
  31.  
  32. if (recursivelist.size() <= 2) {
  33. return sortGivenArray(recursivelist);
  34. } else {
  35. int size = recursivelist.size() /2;
  36. List<Integer> sublist = (List<Integer>)recursivelist.subList(0, size);
  37. List<Integer> sublist2 = recursivelist.subList(size, recursivelist.size());
  38.  
  39.  
  40.  
  41. Runnable r1 = new Thread(){
  42.  
  43. public void run() {
  44. recursiveSort(sublist);
  45. }
  46. };
  47. Thread t1 = new Thread(r1);
  48. t1.start();
  49.  
  50.  
  51.  
  52. Runnable r2 = new Thread(){
  53.  
  54. public void run() {
  55. recursiveSort(sublist2);
  56. }
  57. };
  58. Thread t2 = new Thread(r2);
  59. t2.start();
  60.  
  61. try {
  62. t1.join();
  63. t2.join();
  64.  
  65. } catch (InterruptedException e) {
  66. // TODO Auto-generated catch block
  67. e.printStackTrace();
  68. }
  69. System.out.println("merge");
  70. System.out.println(sublist.toString());
  71. return merge(sublist, sublist2);
  72. }
  73. }
  74.  
  75. private static List<Integer> merge(List<Integer> left, List<Integer> right) {
  76. List<Integer> whole = new List<Integer>();
  77. int leftIndex = 0;
  78. int rightIndex = 0;
  79. int wholeIndex = 0;
  80.  
  81. // As long as neither the left nor the right arraylist has
  82. // been used up, keep taking the smaller of left.get(leftIndex)
  83. // or right.get(rightIndex) and adding it at both.get(bothIndex).
  84. while (leftIndex < left.size() && rightIndex < right.size()) {
  85. if ((left.get(leftIndex).compareTo(right.get(rightIndex))) < 0) {
  86. whole.add(left.get(leftIndex));
  87. leftIndex++;
  88. } else {
  89. whole.add(right.get(rightIndex));
  90. rightIndex++;
  91. }
  92. wholeIndex++;
  93. }
  94.  
  95. List<Integer> rest;
  96. int restIndex = 0;
  97. if (leftIndex >= left.size()) {
  98. // The left arraylist has been use up...
  99. rest = right;
  100. restIndex = rightIndex;
  101. } else {
  102. // The right arraylist has been used up...
  103. rest = left;
  104. restIndex = leftIndex;
  105. }
  106.  
  107. // Copy the rest of whichever arraylist (left or right) was
  108. // not used up.
  109. for (int i = restIndex; i < rest.size(); i++) {
  110. whole.add(rest.get(i));
  111. wholeIndex++;
  112. }
  113. return whole;
  114. }
  115.  
  116. public ArrayList<Integer> randomlist(int min, int max) {
  117. ArrayList<Integer> list = new ArrayList<Integer>();
  118.  
  119. for (int i = 0; i < max; i++) {
  120. list.add(rng.nextInt(max - min) + min);
  121. }
  122. return list;
  123. }
  124.  
  125. public long testtijd(ArrayList<Integer> array) {
  126. long before = System.currentTimeMillis();
  127. sortGivenArray(array);
  128. long after = System.currentTimeMillis();
  129. return after - before;
  130. }
  131.  
  132. public static List<Integer> sortGivenArray(List<Integer> inputArray) {
  133. for (int i = 1; i < inputArray.size(); i++) {
  134.  
  135. int key = inputArray.get(i);
  136.  
  137. for (int j = i - 1; j >= 0; j--) {
  138. if (key < inputArray.get(j)) {
  139. // Shifting Each Element to its right as key is less than
  140. // the existing element at current index
  141. inputArray.set(j + 1, inputArray.get(j));
  142.  
  143. // Special case scenario when all elements are less than
  144. // key, so placing key value at 0th Position
  145. if (j == 0) {
  146. inputArray.set(0, key);
  147. }
  148. } else {
  149. // Putting Key value after element at current index as Key
  150. // value is no more less than the existing element at
  151. // current index
  152. inputArray.set(j + 1, key);
  153. break; // You need to break the loop to save un necessary
  154. // iteration
  155. }
  156. }
  157. }
  158. return inputArray;
  159. }
  160.  
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement