Overview
| Property | Value |
|---|---|
| Best Case | |
| Worst Case | |
| Avg. Case | |
| Aux. Memory | |
| Stable | Yes |
| Adaptive | Yes |

void swap(int i, int j, int *A) {
int tmp = A[i];
A[i] = A[j];
A[j] = tmp;
}
void bubble_sort(const int n, int A[static n]) {
bool swapped = true;
for (int i = 0; swapped && i < n - 1; ++i) {
swapped = false;
for (int j = n - 1; j > i; --j) {
if (A[j] < A[j - 1]) {
swap(j, j - 1, A);
swapped = true;
}
}
}
}Loop Invariant
Consider loop invariant given by
A[0:i-1]is a sorted array of theileast elements ofA.
We prove maintains the requisite properties:
- Initialization
- When
i = 0,A[0:-1]is an empty array. This trivially satisfies .
- When
- Maintenance
- Suppose holds for some
0 ≤ i < n - 1. ThenA[0:i-1]is a sorted array of theileast elements ofA. Our inner loop now starts at the end of the array and swaps each adjacent pair, putting the smaller of the two closer to positioni. Repeating this process across all pairs fromn - 1toi + 1ensuresA[i]is the smallest element ofA[i:n-1]. ThereforeA[0:i]is a sorted array of thei + 1least elements ofA. At the end of the iteration,iis incremented meaningA[0:i-1]still satisfies .
- Suppose holds for some
- Termination
- Termination happens when
i = n - 1. Then impliesA[0:n-2]is a sorted array of then - 1least elements ofA. But thenA[n-1]must be the greatest element ofAmeaningA[0:n-1], the entire array, is in sorted order.
- Termination happens when
Bibliography
- Thomas H. Cormen et al., Introduction to Algorithms, Fourth edition (Cambridge, Massachusett: The MIT Press, 2022).