This is 3% faster because of better use of speculative hardware

This commit is contained in:
Andrei Alexandrescu 2016-08-12 17:09:47 -04:00
parent 30cb5191b0
commit 66ba7b87f0

View file

@ -1340,12 +1340,16 @@ private void quickSortImpl(alias less, Range)(Range r, size_t depth)
r.swapAt(pivotIdx, r.length - 1);
size_t lessI = size_t.max, greaterI = r.length - 1;
while (true)
outer: for (;;)
{
alias pred = binaryFun!less;
while (pred(r[++lessI], pivot)) {}
assert(lessI <= greaterI, "sort: invalid comparison function.");
while (greaterI > lessI && pred(pivot, r[--greaterI])) {}
for (;;)
{
if (greaterI == lessI) break outer;
if (!pred(pivot, r[--greaterI])) break;
}
assert(lessI <= greaterI, "sort: invalid comparison function.");
if (lessI == greaterI) break;
r.swapAt(lessI, greaterI);