Improved slice.sort | changed _smoothsort to _generic_quicksort - #7423
Open
TheRadischen wants to merge 15 commits into
Open
Improved slice.sort | changed _smoothsort to _generic_quicksort#7423TheRadischen wants to merge 15 commits into
TheRadischen wants to merge 15 commits into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Old implementation: Smoothsort
negativ:
hard to read/understand
slow on random data
2x more comparisons compared to most standart sorts
positiv:
fast on almost sorted data
New Implementation: Quicksort (lumoto partitioning)
negativ:
low adaptability
positiv:
easier to read (nice for core)
1.5 - 3x faster on average
unrolled recursion for bigger partition so we dont blow up the stack
Conclusion
Just like old implementaion, the new sort only gets created once and so doesnt bloat code size, bc of parapoly
drop in replacement, no change required for anything else
improvement upon #6739
similar LOC
Tests
also added a bunch of tests for most sort procs
Benchmark
code: https://github.com/TheRadischen/tests/blob/main/slice_sort/test.odin
uses slice.sort, so youd need to change branches to see the changes
New Implementation
Old implementation: