From: yeom Date: Mon, 26 Jul 2010 17:53:09 +0000 (+0000) Subject: more optimized version of the merge sort. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=89fa483464573d95ca8a91f27c4bafc09b58f4bc;p=IRC.git more optimized version of the merge sort. --- diff --git a/Robust/src/Benchmarks/oooJava/mergesort/MergeSort.java b/Robust/src/Benchmarks/oooJava/mergesort/MergeSort.java index 5e8f9a59..8cf566f6 100644 --- a/Robust/src/Benchmarks/oooJava/mergesort/MergeSort.java +++ b/Robust/src/Benchmarks/oooJava/mergesort/MergeSort.java @@ -63,14 +63,14 @@ public class MergeSort { public void runWorkAndTest() { sese run{ - sort(input, result); + sort(input); + } + sese test{ + checkSorted(input); } -// sese test{ -// checkSorted(input); -// } } - public void sort(int A[], int B[]){ + public void sort(int A[]){ } protected void checkSorted(int[] array) { diff --git a/Robust/src/Benchmarks/oooJava/mergesort/MergeSort4.java b/Robust/src/Benchmarks/oooJava/mergesort/MergeSort4.java index e35cbfae..41ff6525 100644 --- a/Robust/src/Benchmarks/oooJava/mergesort/MergeSort4.java +++ b/Robust/src/Benchmarks/oooJava/mergesort/MergeSort4.java @@ -17,10 +17,10 @@ public class MergeSort4 extends MergeSort { super(); } - public void serializedSort(int A[], int B[]){ + public void serializedSort(int A[]) { if (A.length <= QUICK_SIZE) { - quickSort(A,0,A.length-1); + quickSort(A, 0, A.length - 1); } else { int q = A.length / 4; @@ -53,45 +53,28 @@ public class MergeSort4 extends MergeSort { A_quarters3[i - idxs[2]] = A[i]; } - int[] B_quarters0 = new int[size0]; - int[] B_quarters1 = new int[size1]; - int[] B_quarters2 = new int[size2]; - int[] B_quarters3 = new int[size3]; + int h1 = A_quarters0.length + A_quarters1.length; + int h2 = A_quarters2.length + A_quarters3.length; + int[] B_halves0 = new int[h1]; + int[] B_halves1 = new int[h2]; - for (int i = 0; i < idxs[0]; i++) { - B_quarters0[i] = B[i]; - } - for (int i = idxs[0]; i < idxs[1]; i++) { - B_quarters1[i - idxs[0]] = B[i]; - } - for (int i = idxs[1]; i < idxs[2]; i++) { - B_quarters2[i - idxs[1]] = B[i]; - } - for (int i = idxs[2]; i < B.length; i++) { - B_quarters3[i - idxs[2]] = B[i]; - } - - int halfSize = B.length - (2 * q); - int[] B_halves0 = new int[halfSize]; - int[] B_halves1 = new int[halfSize]; + serializedSort(A_quarters0); + serializedSort(A_quarters1); + serializedSort(A_quarters2); + serializedSort(A_quarters3); - sort(A_quarters0, B_quarters0); - sort(A_quarters1, B_quarters1); - sort(A_quarters2, B_quarters2); - sort(A_quarters3, B_quarters3); + sequentialMerge(A_quarters0, A_quarters1, B_halves0); + sequentialMerge(A_quarters2, A_quarters3, B_halves1); + sequentialMerge(B_halves0, B_halves1, A); - merge(A_quarters0, A_quarters1, B_halves0); - merge(A_quarters2, A_quarters3, B_halves1); - merge(B_halves0, B_halves1, A); - } - + } - public void sort(int A[], int B[]) { + public void sort(int A[]) { if(A.length<=SERIALIZED_CUT_OFF){ - serializedSort(A, B); + serializedSort(A); }else{ if (A.length <= QUICK_SIZE) { quickSort(A,0,A.length-1); @@ -126,40 +109,23 @@ public class MergeSort4 extends MergeSort { for (int i = idxs[2]; i < A.length; i++) { A_quarters3[i - idxs[2]] = A[i]; } - - int[] B_quarters0 = new int[size0]; - int[] B_quarters1 = new int[size1]; - int[] B_quarters2 = new int[size2]; - int[] B_quarters3 = new int[size3]; - - for (int i = 0; i < idxs[0]; i++) { - B_quarters0[i] = B[i]; - } - for (int i = idxs[0]; i < idxs[1]; i++) { - B_quarters1[i - idxs[0]] = B[i]; - } - for (int i = idxs[1]; i < idxs[2]; i++) { - B_quarters2[i - idxs[1]] = B[i]; - } - for (int i = idxs[2]; i < B.length; i++) { - B_quarters3[i - idxs[2]] = B[i]; - } - - int halfSize = B.length - (2 * q); - int[] B_halves0 = new int[halfSize]; - int[] B_halves1 = new int[halfSize]; + + int h1 = A_quarters0.length+A_quarters1.length; + int h2 = A_quarters2.length+A_quarters3.length; + int[] B_halves0 = new int[h1]; + int[] B_halves1 = new int[h2]; sese p1{ - sort(A_quarters0, B_quarters0); + sort(A_quarters0); } sese p2{ - sort(A_quarters1, B_quarters1); + sort(A_quarters1); } sese p3{ - sort(A_quarters2, B_quarters2); + sort(A_quarters2); } sese p4{ - sort(A_quarters3, B_quarters3); + sort(A_quarters3); } sese m1{ @@ -173,7 +139,6 @@ public class MergeSort4 extends MergeSort { sese m3{ merge(B_halves0, B_halves1, A); } - } } }