⚡️ Speed up function sorter by 79%
#700
Closed
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.
📄 79% (0.79x) speedup for
sorterincode_to_optimize/bubble_sort.py⏱️ Runtime :
3.07 seconds→1.71 seconds(best of6runs)📝 Explanation and details
The optimized code implements two key algorithmic improvements to the bubble sort that dramatically reduce execution time:
1. Early termination optimization: The code adds a
swappedflag that tracks whether any swaps occurred in a pass. If no swaps happen, the array is already sorted and the algorithm can exit early. This is especially powerful for already-sorted or nearly-sorted inputs - as seen in the test results where sorted arrays show 17,000%+ speedups.2. Reduced iteration bounds: The inner loop now runs
len(arr) - 1 - iiterations instead of alwayslen(arr) - 1. Since bubble sort moves the largest unsorted element to its final position in each pass, the lastielements are already in place and don't need to be checked again. This reduces the total comparisons from O(n²) to approximately half that in the worst case.3. Tuple unpacking for swaps: Replaced the three-line temporary variable swap with Python's tuple unpacking
arr[j], arr[j + 1] = arr[j + 1], arr[j], which is more efficient and concise.The line profiler shows the optimized version performs ~55M operations vs ~114M in the original - nearly a 50% reduction in work. The 79% speedup is most pronounced on large datasets and already-sorted inputs, where early termination provides massive gains (up to 20,000% faster for sorted lists of 1000 elements). Even worst-case scenarios like reverse-sorted lists see 50-70% improvements due to the reduced iteration bounds.
✅ Correctness verification report:
⚙️ Existing Unit Tests and Runtime
benchmarks/test_benchmark_bubble_sort.py::test_sort2test_bubble_sort.py::test_sorttest_bubble_sort_conditional.py::test_sorttest_bubble_sort_import.py::test_sorttest_bubble_sort_in_class.py::TestSorter.test_sort_in_pytest_classtest_bubble_sort_parametrized.py::test_sort_parametrizedtest_bubble_sort_parametrized_loop.py::test_sort_loop_parametrized🌀 Generated Regression Tests and Runtime
To edit these changes
git checkout codeflash/optimize-sorter-mf089z0land push.