Hi I have a question about Batcher's odd-even-merge sort. I have the following code:
public class Batcher {
public static void batchsort(int a[], int l, int r) {
int n = r-l+1;
for (int p=1; p<n; p+=p)
for (int k=p; k>0; k/=2)
for (int j=k%p; j+k<n; j+=(k+k))
for (int i=0; i<n-j-k; i++)
if ((j+i)/(p+p) == (j+i+k)/(p+p))
exch(a, l+j+i, l+j+i+k);
}
public static void main(String[] args) {
int a[] = new int[] {2, 4, 3, 4, 6, 5, 3};
batchsort(a, 0, a.length - 1);
for (int i=0; i<a.length; i++) {
System.out.println(a[i]);
}
}
public static void exch(int a[], int i, int j) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
I will provide some comments about the code's function:
It's divided into phases indexed by variable p
the last phase is when p==n
is batchers odd-even-merge the next-to-phase is when p==n/2
is odd-even-merge with the first stage and all comparators that cross n/2 eliminated the third-to-last phase is when p==n/4
the odd-even-merge with the first two stages and all comparator that cross any multiple of n/4 eliminated and so forth.
Results are:
3
3
4
4
5
2
6
What have I missed?
What is wrong?