Commit 94724a5
authored
⚡️ Speed up function
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 `swapped` flag 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 - i` iterations instead of always `len(arr) - 1`. Since bubble sort moves the largest unsorted element to its final position in each pass, the last `i` elements 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.sorter by 79%1 parent 674e69e commit 94724a5
1 file changed
+6
-4
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
| 5 | + | |
5 | 6 | | |
6 | | - | |
7 | | - | |
8 | | - | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
9 | 11 | | |
10 | 12 | | |
0 commit comments