1
0
Fork 0
mirror of https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2025-01-22 07:53:11 -05:00
No description
Find a file
Kuan-Wei Chiu 41ed780435 lib/sort: optimize heapsort for handling final 2 or 3 elements
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.com
Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
Cc: Ching-Chun (Jim) Huang <jserv@ccns.ncku.edu.tw>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2024-06-24 22:25:03 -07:00
arch
block
certs
crypto
Documentation The core gains placeholders for recently added functions when CONFIG_I2C 2024-06-23 11:06:01 -04:00
drivers bcache: remove heap-related macros and switch to generic min_heap 2024-06-24 22:25:00 -07:00
fs bcachefs: remove heap-related macros and switch to generic min_heap 2024-06-24 22:25:00 -07:00
include cpumask: make core headers including cpumask_types.h where possible 2024-06-24 22:25:02 -07:00
init
io_uring
ipc
kernel lib min_heap: rename min_heapify() to min_heap_sift_down() 2024-06-24 22:24:59 -07:00
lib lib/sort: optimize heapsort for handling final 2 or 3 elements 2024-06-24 22:25:03 -07:00
LICENSES
mm
net
rust
samples
scripts scripts/decode_stacktrace.sh: better support to ARM32 module stack trace 2024-06-24 22:25:00 -07:00
security
sound
tools
usr
virt
.clang-format
.cocciconfig
.editorconfig
.get_maintainer.ignore
.gitattributes
.gitignore
.mailmap
.rustfmt.toml
COPYING
CREDITS
Kbuild
Kconfig
MAINTAINERS cpumask: split out include/linux/cpumask_types.h 2024-06-24 22:25:01 -07:00
Makefile Linux 6.10-rc5 2024-06-23 17:08:54 -04:00
README

Linux kernel
============

There are several guides for kernel developers and users. These guides can
be rendered in a number of formats, like HTML and PDF. Please read
Documentation/admin-guide/README.rst first.

In order to build the documentation, use ``make htmldocs`` or
``make pdfdocs``.  The formatted documentation can also be read online at:

    https://www.kernel.org/doc/html/latest/

There are various text files in the Documentation/ subdirectory,
several of them using the reStructuredText markup notation.

Please read the Documentation/process/changes.rst file, as it contains the
requirements for building and running the kernel, and information about
the problems which may result by upgrading your kernel.