При сортировке посредством выбора[1] из массива выбирается элемент с наименьшим значением и обменивается с первым элементом. Затем из оставшихся n - 1 элементов снова выбирается элемент с наименьшим ключом и обменивается со вторым элементом, и т.д. Эти обмены продолжаются до двух последних элементов. Например, если применить метод выбора к массиву dcab, каждый проход будет выглядеть так, как показано ниже:
Начало d c a b Проход 1 a c d b Проход 2 a b d c Проход 3 a b c d
Нижеследующий код демонстрирует простейшую сортировку посредством выбора:
/* Сортировка посредством выбора. */ void select(char *items, int count) { register int a, b, c; int exchange; char t; for(a=0; a < count-1; ++a) { exchange = 0; c = a; t = items[a]; for(b=a+1; b < count; ++b) { if(items[b] < t) { c = b; t = items[b]; exchange = 1; } } if(exchange) { items[c] = items[a]; items[a] = t; } } }
К сожалению, как и в пузырьковой сортировке, внешний цикл выполняется n - 1 раз, а внутренний — в среднем n/2 раз. Следовательно, сортировка посредством выбора требует
1/2(n2-n)
сравнений. Таким образом, это алгоритм порядка n2, из-за чего он считается слишком медленным для сортировки большого количества элементов. Несмотря на то, что количество сравнений в пузырьковой сортировке и сортировке посредством выбора одинаковое, в последней количество обменов в среднем случае намного меньше, чем в пузырьковой сортировке.
[1]Называется также сортировкой выбором и сортировкой выборками.