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