• Kuan-Wei Chiu's avatar
    lib/sort: optimize heapsort for handling final 2 or 3 elements · 41ed7804
    Kuan-Wei Chiu authored
    After building the heap, the code continuously pops two elements from the
    heap until only 2 or 3 elements remain, at which point it switches back to
    a regular heapsort with one element popped at a time.  However, to handle
    the final 2 or 3 elements, an additional else-if statement in the while
    loop was introduced, potentially increasing branch misses.  Moreover, when
    there are only 2 or 3 elements left, continuing with regular heapify
    operations is unnecessary as these cases are simple enough to be handled
    with a single comparison and 1 or 2 swaps outside the while loop.
    
    Eliminating the additional else-if statement and directly managing cases
    involving 2 or 3 elements outside the loop reduces unnecessary conditional
    branches resulting from the numerous loops and conditionals in heapify.
    
    This optimization maintains consistent numbers of comparisons and swaps
    for arrays with even lengths while reducing swaps and comparisons for
    arrays with odd lengths from 2.5 swaps and 1 comparison to 1.5 swaps and 1
    comparison.
    
    Link: https://lkml.kernel.org/r/20240527203011.1644280-4-visitorckw@gmail.comSigned-off-by: default avatarKuan-Wei Chiu <visitorckw@gmail.com>
    Cc: Ching-Chun (Jim) Huang <jserv@ccns.ncku.edu.tw>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    41ed7804
sort.c 9.27 KB