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

void swap(int i, int j, int *A) {
int tmp = A[i];
A[i] = A[j];
A[j] = tmp;
}
void selection_sort(const int n, int A[static n]) {
for (int i = 0; i < n - 1; ++i) {
int mini = i;
for (int j = i + 1; j < n; ++j) {
if (A[j] < A[mini]) {
mini = j;
}
}
swap(i, mini, A);
}
}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 then finds the smallest element inA[i:n]and swaps it withA[i]. 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
- On termination,
i = n - 1andA[0:n-2]are then - 1least elements ofAin sorted order. But, by exhaustion,A[n-1]must be the largest element meaningA[0:n-1], the entire array, is in sorted order.
- On termination,
Bibliography
- Thomas H. Cormen et al., Introduction to Algorithms, Fourth edition (Cambridge, Massachusett: The MIT Press, 2022).