Рассмотрим пример сортировки по возрастанию. То есть на начальной позиции в массиве должен стоять минимальный элемент, на следующей — больший или равный и т. д., на последнем месте должен стоять наибольший элемент.
Суть алгоритма такова. Во всём отыскиваем минимальный элемент, меняем его местами с начальным. Затем в оставшейся части массива (т. е. среди всех элементов кроме начального) снова отыскиваем минимальный элемент, меняем его местами уже со вторым элементом в массиве. И так далее.
Иллюстрация:
Код:
for (int i = 0; i < a.length; i++) {
/* Предполагаем, что начальный элемент рассматриваемого
* фрагмента и будет минимальным.
*/
int min = a[i]; // Предполагаемый минимальный элемент
int imin = i; // Индекс минимального элемента
/* Просматриваем оставшийся фрагмент массива и ищем там
* элемент, меньший предположенного минимума.
*/
for (int j = i+1; j < a.length; j++) {
/* Если находим новый минимум, то запоминаем его индекс.
* И обновляем значение минимума.
*/
if (a[j] < min) {
min = a[j];
imin = j;
}
}
/* Проверяем, нашёлся ли элемент меньше, чем стоит на
* текущей позиции. Если нашёлся, то меняем элементы местами.
*/
if (i != imin) {
int temp = a[i];
a[i] = a[imin];
a[imin] = temp;
}
}