diff --git a/schwab_sort.h b/schwab_sort.h index 3c1f693..36bd2d6 100644 --- a/schwab_sort.h +++ b/schwab_sort.h @@ -147,12 +147,11 @@ static inline int schwab_partition( arr[high] = tmphi; /* Aren't inclusive end indices of 4 "blocks" - b0 is smallest vals */ - int b0 = low, b1 = low, b2 = low, b3 = low; + int b0 = low, b1 = low, b2 = low; - while(b3 < high) { - /* This I moved to be first for hot code path for constant / smallrange */ + for(int b3 = low; b3 < high; ++b3) { + /* This I moved to be first to avoid unnecessary curr copy below */ if(arr[b3] >= khi) { - ++b3; continue; } @@ -169,7 +168,7 @@ static inline int schwab_partition( arr[b2] = arr[b1]; arr[b1] = arr[b0]; arr[b0] = curr; - ++b0; ++b1; ++b2; ++b3; + ++b0; ++b1; ++b2; continue; } @@ -177,11 +176,11 @@ static inline int schwab_partition( arr[b3] = arr[b2]; arr[b2] = arr[b1]; arr[b1] = curr; - ++b1; ++b2; ++b3; + ++b1; ++b2; } else { arr[b3] = arr[b2]; arr[b2] = curr; - ++b2; ++b3; + ++b2; } } @@ -196,7 +195,7 @@ static inline int schwab_partition( /* Handle output vars as per doc comment */ *plo = b0; *pmid = b1; - *phi = b2; /* Because of: [*] */ + *phi = b2; /* There are mid parts to process */ return 1;