Skip to content

Instantly share code, notes, and snippets.

@valkum
Created June 9, 2013 19:55
Show Gist options
  • Save valkum/5744970 to your computer and use it in GitHub Desktop.
Save valkum/5744970 to your computer and use it in GitHub Desktop.
private void mergeSortTernary(int l, int r) {
if( l < r ) {
int p = (r-l)/3;
int q = 2*p;
int m1=p+l;
int m2 = l+q;
mergeSortTernary(l, m1);
mergeSortTernary(m1+1, m2);
mergeSortTernary(m2+1, r);
mergeTernary(l, m1, m2, r);
}
}
private void mergeTernary(int l, int m1, int m2, int r) {
int[] B = new int[r-l+1];
int i = 0;
int k = m1+1;
int k2 = m2+1;
int j=l;
while (j<=m1 && k<=m2&& k2<=r) {
if (A[j] <= A[k]) {
B[i++] = A[j++];
} else if (A[k] <= A[k2]) {
B[i++] = A[k++];
} else {
B[i++] = A[k2++];
}
}
while (j<=m1) {
B[i++] = A[j++];
}
while (k<=m2) {
B[i++] = A[k++];
}
while (k2<=r) {
B[i++] = A[k2++];
}
for(i = l; i<=r;i++) {
A[i] = B[i-l];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment