Advertisement
daskalot

Untitled

Apr 12th, 2019
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.19 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class MergeSort
  4. {
  5. public static int sporedbi=0;
  6. public static int zameni=0;
  7. public static int[] array;
  8. public static boolean firstPass = true;
  9. public static void mergeDevide(String operacija, String nasoka, int array[], int levo, int desno){
  10. if(levo < desno){
  11. sporedbi++;
  12. int sredina = (levo+desno)/2;
  13. if(operacija.equals("trace")) printArr(array,true,levo,desno,sredina);
  14. mergeDevide(operacija,nasoka,array,levo,sredina);
  15. mergeDevide(operacija,nasoka,array,sredina+1,desno);
  16. mergeMerge(array,levo,sredina,desno,nasoka,operacija);
  17. }
  18. }
  19. public static void mergeMerge(int array[], int levo, int sredina, int desno, String nasoka,String operacija){
  20. int brojLevo = (sredina - levo) + 1;
  21. int brojDesno = (desno - sredina);
  22. int levaPomosna[] = new int[brojLevo];
  23. int desnaPomosna[] = new int[brojDesno];
  24. for(int i=0;i<brojLevo;i++)
  25. levaPomosna[i] = array[levo+i];
  26. for(int i=0;i<brojDesno;i++)
  27. desnaPomosna[i] = array[sredina+1+i];
  28. int dosegaLevo = 0, dosegaDesno = 0,smesteni = levo;
  29. while(dosegaLevo < brojLevo && dosegaDesno < brojDesno){
  30. zameni++;
  31. if(nasoka.equals("up")){
  32. if(levaPomosna[dosegaLevo] <= desnaPomosna[dosegaDesno]){
  33. sporedbi++;
  34. array[smesteni] = levaPomosna[dosegaLevo];
  35. dosegaLevo++;
  36. }
  37. else{
  38. sporedbi++;
  39. array[smesteni] = desnaPomosna[dosegaDesno];
  40. dosegaDesno++;
  41. }
  42. }
  43. else{
  44. if(levaPomosna[dosegaLevo] >= desnaPomosna[dosegaDesno]){
  45. sporedbi++;
  46. array[smesteni] = levaPomosna[dosegaLevo];
  47. dosegaLevo++;
  48. }
  49. else{
  50. sporedbi++;
  51. array[smesteni] = desnaPomosna[dosegaDesno];
  52. dosegaDesno++;
  53. }
  54. }
  55. smesteni++;
  56. }
  57. while(dosegaLevo < brojLevo){
  58. sporedbi++;
  59. array[smesteni] = levaPomosna[dosegaLevo];
  60. smesteni++;
  61. dosegaLevo++;
  62. }
  63. while(dosegaDesno < brojDesno){
  64. sporedbi++;
  65. array[smesteni] = desnaPomosna[dosegaDesno];
  66. dosegaDesno++;
  67. smesteni++;
  68. }
  69. for(int i=levo;i<=desno;i++){
  70. System.out.print(array[i]+"");
  71. }
  72. System.out.println();
  73. }
  74. public static void printArr(int[] arr,boolean trebaCrta, int levo, int desno, int sredina) {
  75. for(int i = levo; i <= desno; i++) {
  76. System.out.print(array[i]+" ");
  77. if(trebaCrta && i == sredina) {
  78. System.out.printf("| ");
  79. }
  80. }
  81. System.out.println();
  82. }
  83.  
  84. public static void main(String[] args){
  85. Scanner sc=new Scanner(System.in);
  86. String[] s=sc.nextLine().split(" ");
  87. String operacija=s[0];
  88. String vidSort=s[1];
  89. String nasoka=s[2];
  90. int n=Integer.parseInt(s[3]);
  91. array=new int[n];
  92. s=sc.nextLine().split(" ");
  93. for(int i=0; i<n; i++) array[i]=Integer.parseInt(s[i]);
  94. mergeDevide(operacija, nasoka, array,0,n-1);
  95. if(!operacija.equals("trace")){
  96. System.out.println(zameni+" "+sporedbi+1);
  97. zameni = 0; sporedbi = 0;
  98. mergeDevide(operacija, nasoka, array,0,n-1);
  99. System.out.println(zameni+" "+sporedbi+1);
  100. zameni = 0; sporedbi = 0;
  101. if(nasoka.equals("up"))
  102. nasoka = "down";
  103. else
  104. nasoka = "up";
  105. zameni = 0; sporedbi = 0;
  106. mergeDevide(operacija, nasoka, array,0,n-1);
  107. System.out.println(zameni+" "+sporedbi+1);
  108. }
  109.  
  110.  
  111. }
  112.  
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement