void mergeHi(int lo, int mid, int hi) { assert compare(mid - 1, hi - 1) > 0; int len2 = hi - mid; save(mid, len2); copy(mid - 1, hi - 1); int i = mid - 2, j = len2 - 1, dest = hi - 2; outer: for (;;) { for (int count = 0; count < MIN_GALLOP; ) { if (i < lo || j < 0) { break outer; } else if (compareSaved(j, i) >= 0) { restore(j--, dest--); count = 0; } else { copy(i--, dest--); ++count; } } // galloping int next = upperSaved3(lo, i + 1, j); while (i >= next) { copy(i--, dest--); } restore(j--, dest--); } for (; j >= 0; --dest) { restore(j--, dest); } assert i == dest; }
void mergeHi(int lo, int mid, int hi) { assert compare(mid - 1, hi - 1) > 0; int len2 = hi - mid; save(mid, len2); copy(mid - 1, hi - 1); int i = mid - 2, j = len2 - 1, dest = hi - 2; outer: for (;;) { for (int count = 0; count < MIN_GALLOP; ) { if (i < lo || j < 0) { break outer; } else if (compareSaved(j, i) >= 0) { restore(j--, dest--); count = 0; } else { copy(i--, dest--); ++count; } } // galloping int next = upperSaved3(lo, i + 1, j); while (i >= next) { copy(i--, dest--); } restore(j--, dest--); } for (; j >= 0; --dest) { restore(j--, dest); } assert i == dest; }
void mergeHi(int lo, int mid, int hi) { assert compare(mid - 1, hi - 1) > 0; int len2 = hi - mid; save(mid, len2); copy(mid - 1, hi - 1); int i = mid - 2, j = len2 - 1, dest = hi - 2; outer: for (;;) { for (int count = 0; count < MIN_GALLOP; ) { if (i < lo || j < 0) { break outer; } else if (compareSaved(j, i) >= 0) { restore(j--, dest--); count = 0; } else { copy(i--, dest--); ++count; } } // galloping int next = upperSaved3(lo, i + 1, j); while (i >= next) { copy(i--, dest--); } restore(j--, dest--); } for (; j >= 0; --dest) { restore(j--, dest); } assert i == dest; }
void mergeHi(int lo, int mid, int hi) { assert compare(mid - 1, hi - 1) > 0; int len2 = hi - mid; save(mid, len2); copy(mid - 1, hi - 1); int i = mid - 2, j = len2 - 1, dest = hi - 2; outer: for (;;) { for (int count = 0; count < MIN_GALLOP; ) { if (i < lo || j < 0) { break outer; } else if (compareSaved(j, i) >= 0) { restore(j--, dest--); count = 0; } else { copy(i--, dest--); ++count; } } // galloping int next = upperSaved3(lo, i + 1, j); while (i >= next) { copy(i--, dest--); } restore(j--, dest--); } for (; j >= 0; --dest) { restore(j--, dest); } assert i == dest; }