diff --git a/qsort.h b/qsort.h index a935535..7236112 100644 --- a/qsort.h +++ b/qsort.h @@ -258,10 +258,11 @@ static inline pret3 partition3_sp2(uint32_t array[], int low, int high, uint32_t while(jl <= jr) { /* Handle left and find wrongly placed element */ while((array[jl] <= pivotval) && (jl <= jr)) { - if(array[jl] != pivotval) { - if(++il != jl) - swapit(&array[il], &array[jl]); - } + int isNonPivot = (array[jl] != pivotval); + int nonSameIndex = (il + 1 != jl); + if(isNonPivot & nonSameIndex) + swapit(&array[il + 1], &array[jl]); + il += isNonPivot & nonSameIndex; ++jl; }