diff --git a/qsort.h b/qsort.h index 14dc9cc..c69c9fc 100644 --- a/qsort.h +++ b/qsort.h @@ -259,7 +259,9 @@ static inline pret3 partition3_sp2(uint32_t array[], int low, int high, uint32_t /* Handle left and find wrongly placed element */ while((array[jl] <= pivotval) && (jl <= jr)) { int isNonPivot = (array[jl] != pivotval); - if(isNonPivot) swapit(&array[il + 1], &array[jl]); + int nonSameIndex = (il + 1 != jl); + if(isNonPivot & nonSameIndex) + swapit(&array[il + 1], &array[jl]); il += isNonPivot; ++jl; } @@ -267,7 +269,9 @@ static inline pret3 partition3_sp2(uint32_t array[], int low, int high, uint32_t /* Handle right and find wrongly placed element */ while((array[jr] >= pivotval) && (jl <= jr)) { int isNonPivot = (array[jr] != pivotval); - if(isNonPivot) swapit(&array[ir - 1], &array[jr]); + int nonSameIndex = (ir - 1 != jr); + if(isNonPivot & nonSameIndex) + swapit(&array[ir - 1], &array[jr]); ir -= isNonPivot; --jr; }