Похожим методом является сортировка выбором (минимума или максимума).
Чтобы отсортировать массив, раз выберем минимум среди еще неотсортированных чисел и поставим его на свое место (а именно, на -тую позицию после -той итерации). Чтобы упростить реализацию, на -ой итерации будем искать минимум на отрезке , меняя его местами с текущим -тым элементом, после чего отрезок будет отсортирован.
void selection_sort(int *a, int n) {
for (int k = 0; k < n - 1; k++)
for (int j = k + 1; j < n; j++)
if (a[k] > a[j])
swap(a[j], a[k]);
}
Доказательства корректности и времени работы аналогичны пузырьковой сортировке: после каждой из итераций мы за время получаем отсортированный префикс (первые элементов), а значит за операций отсортируем весь массив целиком.