Advertisement
Guest User

Untitled

a guest
Oct 21st, 2014
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.22 KB | None | 0 0
  1. public static void main(String args[]) throws Exception {
  2.  
  3. // just for testing purposes
  4. int myArray[] = {4,6,8,1,3,2,9,5,7,6,4,2,1,3,9,8,7,5};
  5. mergeSort(myArray);
  6. System.out.println("Sorted array is:n");
  7. for (int i = 0; i < myArray.length; i++) {
  8. System.out.print(myArray[i] + " ");
  9. }
  10. System.out.println();
  11. }
  12.  
  13. class MergeSortNonRecursive {
  14.  
  15. static Stack<ProgramFrame> callStack;
  16.  
  17. // this implement the merge algorithm seen in class. Feel free to call it.
  18. public static void merge(int A[], int start, int mid, int stop) {
  19. int index1 = start;
  20. int index2 = mid + 1;
  21. int tmp[] = new int[A.length];
  22. int indexTmp = start;
  23.  
  24. while (indexTmp <= stop) {
  25. if (index1 <= mid && (index2 > stop || A[index1] <= A[index2])) {
  26. tmp[indexTmp] = A[index1];
  27. index1++;
  28. } else {
  29. if (index2 <= stop && (index1 > mid || A[index2] <= A[index1])) {
  30. tmp[indexTmp] = A[index2];
  31. index2++;
  32. }
  33. }
  34. indexTmp++;
  35. }
  36. for (int i = start; i <= stop; i++) A[i] = tmp[i];
  37. }
  38.  
  39. static void mergeSort(int A[]) {
  40. /* WRITE YOUR CODE HERE */
  41. //stack we use
  42. callStack = new Stack<ProgramFrame>();
  43.  
  44. //initial program frame
  45. ProgramFrame current = new ProgramFrame(0, A.length - 1, 1);
  46.  
  47. //put frame on stack
  48. callStack.push(current);
  49.  
  50. //as long as our stack isn't empty...
  51. while (!callStack.empty()) {
  52.  
  53. //as long as the top Frame contains more than one integer
  54. while (callStack.peek().start < callStack.peek().stop) {
  55.  
  56. //must be defined before pushing or else the values mess up
  57. int left = callStack.peek().start;
  58. int middle = (callStack.peek().start + callStack.peek().stop) / 2;
  59. int right = callStack.peek().stop;
  60.  
  61. current = new ProgramFrame(middle + 1, right, callStack.peek().PC++);
  62. callStack.push(current);
  63. //order ensures left is always on the top
  64. current = new ProgramFrame(left, middle, callStack.peek().PC++);
  65. callStack.push(current);
  66. }
  67. int PC = callStack.peek().PC; // need to check PC's
  68. int start = callStack.peek().start; //assign start and mid for merge
  69. int mid = callStack.peek().stop; //assign left and middle for merge from the left frame
  70. callStack.pop();
  71.  
  72. //required if the next Frame (the right frame) isn't at its base of 1 integer and they have to be the same PC otherwise this will run continously
  73. if ((callStack.peek().start != callStack.peek().stop) && (PC == callStack.peek().PC)) {
  74.  
  75. //must be defined before pushing or else the values mess up
  76. int left = callStack.peek().start;
  77. int middle = (callStack.peek().start + callStack.peek().stop) / 2;
  78. int right = callStack.peek().stop;
  79.  
  80. current = new ProgramFrame(middle + 1, right, callStack.peek().PC++);
  81. callStack.push(current);
  82. //order ensures left is always on the top
  83. current = new ProgramFrame(left, middle, callStack.peek().PC++);
  84. callStack.push(current);
  85. }
  86.  
  87. int stop = callStack.peek().stop; //get stop from the right frame
  88.  
  89. merge(A, start, mid, stop); //merge
  90. }
  91. }
  92.  
  93. //Static Error: This class does not have a static void main method accepting String[]. ??!??
  94. public static void main(String args[]) throws Exception {
  95.  
  96. // just for testing purposes
  97. int myArray[] = {4,6,8,1,3,2,9,5,7,6,4,2,1,3,9,8,7,5};
  98. mergeSort(myArray);
  99. System.out.println("Sorted array is:n");
  100. for (int i = 0; i < myArray.length; i++) {
  101. System.out.print(myArray[i] + " ");
  102. }
  103. System.out.println();
  104. }
  105. }
  106.  
  107. import java.util.*;
  108. import java.io.*;
  109.  
  110. class ProgramFrame {
  111. int start;
  112. int stop;
  113. int PC;
  114.  
  115. public ProgramFrame(int myStart, int myStop, int myPC) {
  116. start = myStart;
  117. stop = myStop;
  118. PC = myPC;
  119. }
  120.  
  121. // returns a String describing the content of the object
  122. public String toString() {
  123. return "ProgramFrame: start = " + start + " stop = " + stop + " PC = " + PC;
  124. }
  125. }
  126.  
  127. class MergeSortNonRecursive {
  128.  
  129. static Stack<ProgramFrame> callStack;
  130.  
  131. // this implement the merge algorithm seen in class. Feel free to call it.
  132. public static void merge(int A[], int start, int mid, int stop) {
  133. int index1 = start;
  134. int index2 = mid + 1;
  135. int tmp[] = new int[A.length];
  136. int indexTmp = start;
  137.  
  138. while (indexTmp <= stop) {
  139. if (index1 <= mid && (index2 > stop || A[index1] <= A[index2])) {
  140. tmp[indexTmp] = A[index1];
  141. index1++;
  142. } else {
  143. if (index2 <= stop && (index1 > mid || A[index2] <= A[index1])) {
  144. tmp[indexTmp] = A[index2];
  145. index2++;
  146. }
  147. }
  148. indexTmp++;
  149. }
  150. for (int i = start; i <= stop; i++) A[i] = tmp[i];
  151. }
  152.  
  153. static void mergeSort(int A[]) {
  154. /* WRITE YOUR CODE HERE */
  155. //stack we use
  156. callStack = new Stack<ProgramFrame>();
  157.  
  158. //initial program frame
  159. ProgramFrame current = new ProgramFrame(0, A.length - 1, 1);
  160.  
  161. //put frame on stack
  162. callStack.push(current);
  163.  
  164. //as long as our stack isn't empty...
  165. while (!callStack.empty()) {
  166.  
  167. //as long as the top Frame contains more than one integer
  168. while (callStack.peek().start < callStack.peek().stop) {
  169.  
  170. //must be defined before pushing or else the values mess up
  171. int left = callStack.peek().start;
  172. int middle = (callStack.peek().start + callStack.peek().stop) / 2;
  173. int right = callStack.peek().stop;
  174.  
  175. current = new ProgramFrame(middle + 1, right, callStack.peek().PC++);
  176. callStack.push(current);
  177. //order ensures left is always on the top
  178. current = new ProgramFrame(left, middle, callStack.peek().PC++);
  179. callStack.push(current);
  180. }
  181. int PC = callStack.peek().PC; // need to check PC's
  182. int start = callStack.peek().start; //assign start and mid for merge
  183. int mid = callStack.peek().stop; //assign left and middle for merge from the left frame
  184. callStack.pop();
  185.  
  186. //required if the next Frame (the right frame) isn't at its base of 1 integer and they have to be the same PC otherwise this will run continously
  187. if ((callStack.peek().start != callStack.peek().stop) && (PC == callStack.peek().PC)) {
  188.  
  189. //must be defined before pushing or else the values mess up
  190. int left = callStack.peek().start;
  191. int middle = (callStack.peek().start + callStack.peek().stop) / 2;
  192. int right = callStack.peek().stop;
  193.  
  194. current = new ProgramFrame(middle + 1, right, callStack.peek().PC++);
  195. callStack.push(current);
  196. //order ensures left is always on the top
  197. current = new ProgramFrame(left, middle, callStack.peek().PC++);
  198. callStack.push(current);
  199. }
  200.  
  201. int stop = callStack.peek().stop; //get stop from the right frame
  202.  
  203. merge(A, start, mid, stop); //merge
  204. }
  205. }
  206.  
  207. //Static Error: This class does not have a static void main method accepting String[]. ??!??
  208. public static void main(String args[]) throws Exception {
  209.  
  210. // just for testing purposes
  211. int myArray[] = {4,6,8,1,3,2,9,5,7,6,4,2,1,3,9,8,7,5};
  212. mergeSort(myArray);
  213. System.out.println("Sorted array is:n");
  214. for (int i = 0; i < myArray.length; i++) {
  215. System.out.print(myArray[i] + " ");
  216. }
  217. System.out.println();
  218. }
  219. }
  220.  
  221. class MergeSortNonRecursive
  222.  
  223. public class MergeSortNonRecursive
  224.  
  225. Welcome to DrJava. Working directory is /code
  226. > run ProgramFrame
  227. Static Error: This class does not have a static void main method accepting String[].
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement