more optimized version of the merge sort.
authoryeom <yeom>
Mon, 26 Jul 2010 17:53:09 +0000 (17:53 +0000)
committeryeom <yeom>
Mon, 26 Jul 2010 17:53:09 +0000 (17:53 +0000)
Robust/src/Benchmarks/oooJava/mergesort/MergeSort.java
Robust/src/Benchmarks/oooJava/mergesort/MergeSort4.java

index 5e8f9a59c9dc4a9d73b67bf475ea383f87fcbd50..8cf566f64bc75ef1a77a34cecb7f7952839fc9a2 100644 (file)
@@ -63,14 +63,14 @@ public class MergeSort {
 \r
   public void runWorkAndTest() {\r
     sese run{\r
-      sort(input, result);\r
+      sort(input);\r
+    }\r
+    sese test{\r
+      checkSorted(input);\r
     }\r
-//    sese test{\r
-//      checkSorted(input);\r
-//    }\r
   }\r
   \r
-  public void sort(int A[], int B[]){\r
+  public void sort(int A[]){\r
   }\r
 \r
   protected void checkSorted(int[] array) {\r
index e35cbfae53f83fe13f1818e7a795b542b4295dac..41ff6525d3748867cf19261a3c4ef952ec82b7b8 100644 (file)
@@ -17,10 +17,10 @@ public class MergeSort4 extends MergeSort {
     super();\r
   }\r
   \r
-  public void serializedSort(int A[], int B[]){\r
+  public void serializedSort(int A[]{\r
 \r
     if (A.length <= QUICK_SIZE) {\r
-      quickSort(A,0,A.length-1);\r
+      quickSort(A, 0, A.length - 1);\r
     } else {\r
 \r
       int q = A.length / 4;\r
@@ -53,45 +53,28 @@ public class MergeSort4 extends MergeSort {
         A_quarters3[i - idxs[2]] = A[i];\r
       }\r
 \r
-      int[] B_quarters0 = new int[size0];\r
-      int[] B_quarters1 = new int[size1];\r
-      int[] B_quarters2 = new int[size2];\r
-      int[] B_quarters3 = new int[size3];\r
+      int h1 = A_quarters0.length + A_quarters1.length;\r
+      int h2 = A_quarters2.length + A_quarters3.length;\r
+      int[] B_halves0 = new int[h1];\r
+      int[] B_halves1 = new int[h2];\r
 \r
-      for (int i = 0; i < idxs[0]; i++) {\r
-        B_quarters0[i] = B[i];\r
-      }\r
-      for (int i = idxs[0]; i < idxs[1]; i++) {\r
-        B_quarters1[i - idxs[0]] = B[i];\r
-      }\r
-      for (int i = idxs[1]; i < idxs[2]; i++) {\r
-        B_quarters2[i - idxs[1]] = B[i];\r
-      }\r
-      for (int i = idxs[2]; i < B.length; i++) {\r
-        B_quarters3[i - idxs[2]] = B[i];\r
-      }\r
-\r
-      int halfSize = B.length - (2 * q);\r
-      int[] B_halves0 = new int[halfSize];\r
-      int[] B_halves1 = new int[halfSize];\r
+      serializedSort(A_quarters0);\r
+      serializedSort(A_quarters1);\r
+      serializedSort(A_quarters2);\r
+      serializedSort(A_quarters3);\r
 \r
-      sort(A_quarters0, B_quarters0);\r
-      sort(A_quarters1, B_quarters1);\r
-      sort(A_quarters2, B_quarters2);\r
-      sort(A_quarters3, B_quarters3);\r
+      sequentialMerge(A_quarters0, A_quarters1, B_halves0);\r
+      sequentialMerge(A_quarters2, A_quarters3, B_halves1);\r
+      sequentialMerge(B_halves0, B_halves1, A);\r
 \r
-      merge(A_quarters0, A_quarters1, B_halves0);\r
-      merge(A_quarters2, A_quarters3, B_halves1);\r
-      merge(B_halves0, B_halves1, A);\r
-      \r
     }\r
-  \r
+\r
   }\r
 \r
-  public void sort(int A[], int B[]) {\r
+  public void sort(int A[]) {\r
     \r
     if(A.length<=SERIALIZED_CUT_OFF){\r
-      serializedSort(A, B);\r
+      serializedSort(A);\r
     }else{\r
       if (A.length <= QUICK_SIZE) {\r
         quickSort(A,0,A.length-1);\r
@@ -126,40 +109,23 @@ public class MergeSort4 extends MergeSort {
         for (int i = idxs[2]; i < A.length; i++) {\r
           A_quarters3[i - idxs[2]] = A[i];\r
         }\r
-  \r
-        int[] B_quarters0 = new int[size0];\r
-        int[] B_quarters1 = new int[size1];\r
-        int[] B_quarters2 = new int[size2];\r
-        int[] B_quarters3 = new int[size3];\r
-  \r
-        for (int i = 0; i < idxs[0]; i++) {\r
-          B_quarters0[i] = B[i];\r
-        }\r
-        for (int i = idxs[0]; i < idxs[1]; i++) {\r
-          B_quarters1[i - idxs[0]] = B[i];\r
-        }\r
-        for (int i = idxs[1]; i < idxs[2]; i++) {\r
-          B_quarters2[i - idxs[1]] = B[i];\r
-        }\r
-        for (int i = idxs[2]; i < B.length; i++) {\r
-          B_quarters3[i - idxs[2]] = B[i];\r
-        }\r
-  \r
-        int halfSize = B.length - (2 * q);\r
-        int[] B_halves0 = new int[halfSize];\r
-        int[] B_halves1 = new int[halfSize];\r
+\r
+        int h1 = A_quarters0.length+A_quarters1.length;\r
+        int h2 = A_quarters2.length+A_quarters3.length;\r
+        int[] B_halves0 = new int[h1];\r
+        int[] B_halves1 = new int[h2];\r
   \r
         sese p1{\r
-          sort(A_quarters0, B_quarters0);\r
+          sort(A_quarters0);\r
         }\r
         sese p2{\r
-          sort(A_quarters1, B_quarters1);\r
+          sort(A_quarters1);\r
         }\r
         sese p3{\r
-          sort(A_quarters2, B_quarters2);\r
+          sort(A_quarters2);\r
         }\r
         sese p4{\r
-          sort(A_quarters3, B_quarters3);\r
+          sort(A_quarters3);\r
         }\r
   \r
         sese m1{\r
@@ -173,7 +139,6 @@ public class MergeSort4 extends MergeSort {
         sese m3{\r
          merge(B_halves0, B_halves1, A);\r
         }\r
-        \r
       }\r
     }\r
   }\r