Skip to content

Commit 94724a5

Browse files
⚡️ Speed up function sorter by 79%
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.
1 parent 674e69e commit 94724a5

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

code_to_optimize/bubble_sort.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
def sorter(arr):
22
print("codeflash stdout: Sorting list")
33
for i in range(len(arr)):
4-
for j in range(len(arr) - 1):
4+
swapped = False
5+
for j in range(len(arr) - 1 - i):
56
if arr[j] > arr[j + 1]:
6-
temp = arr[j]
7-
arr[j] = arr[j + 1]
8-
arr[j + 1] = temp
7+
arr[j], arr[j + 1] = arr[j + 1], arr[j]
8+
swapped = True
9+
if not swapped:
10+
break
911
print(f"result: {arr}")
1012
return arr

0 commit comments

Comments
 (0)