Сортировка массива методом линейного выбора с обменом

Рассмотрим задачу сортировки массива из 5 элементов по возрастанию.
Программа для решения этой задачи на языке СИ выглядит следующим образом:

#include <stdio.h>
#include <stdlib.h>
void main() {
int a[]={5, 9, 2, 1, 8};    
int i, j, nom, min, buf;
for(i=0; i<4; i++) {
min=a[i];  
nom=i;
for(j=i; j<5; j++)
if (a[j]<min) {
min=a[j]; 
nom=j;
}
buf=a[i];
a[i]=min;
a[nom]=buf;
}
for (j=0; j<5; j++) 
printf("%4d",a[j]);            
}

Давайте разберёмся с этой программкой и выполним её по шагам. 
Командой int a[]={5, 9, 2, 1, 8}; создаётся массив из пяти элементов.
 int i, j, nom, min, buf; - задаются переменные:
i - номер просмотра;
j - позиция элемента в массиве;
nom - позиция минимального элемента в массиве;
min - значение минимального элемента в массиве;
buf - буфер для перестановки элементов местами.
Строкой for(i=0; i<4; i++) начинается внешний цикл программы. Следует оговорится, что если в программе есть вложенный цикл, то пока не выполнится внутренний цикл, следующая итерация внешнего цикла не начинается.
Рассмотрим проходы внешнего и внутреннего циклов.
Массив до начала циклов выглядит следующим образом:

Значение элемента массива (a[i])
5
9
2
1
8
Позиция (i)
0
1
2
3
4
 
Первый проход по внешнему циклу
i = 0 (i – позиция элемента массива)
min = 5
nom = 0
Первый проход по внутреннему циклу
j=0
a[0]<5 (нет) // a[0] – значение элемента массива на нулевой позиции, т. е a[0] это 5
 Второй проход по внутреннему циклу
j = 1
a[1]<5 (нет) // a[1] – значение элемента массива на первой позиции, т. е a[1] это 9
Третий проход по внутреннему циклу
j = 2
a[2]<5 (да) // a[2] – значение элемента массива на второй позиции, т. е a[2] это 2
min = 2
nom = 2
Четвёртый проход по внутреннему циклу
j = 3
a[3]<2 (да) // a[3] – значение элемента массива на третьей позиции, т. е a[3] это 1
min = 1
nom = 3
Пятый проход по внутреннему циклу
j = 2
a[4]<1 (нет) // a[4] – значение элемента массива на четвёртой позиции, т. е a[4] это 8
Выходим из внутреннего цикла,  так как j на следующем проходе будет равно 5, по условию j<5
buf=5
a[0]=1
a[3]=5
По завершению первого прохода внешнего цикла, массив будет иметь вид:

Значение элемента массива (a[i])
1
9
2
5
8
Позиция (i)
0
1
2
3
4

Второй проход по внешнему циклу
i = 1 (i – позиция элемента массива)
min = 9
nom = 1
Первый проход по внутреннему циклу
j=1
a[1]<9(нет) // a[1] – значение элемента массива на первой позиции, т. е a[1] это 9
 Второй проход по внутреннему циклу
j = 2
a[2]<9 (да) // a[2] – значение элемента массива на второй позиции, т. е a[2] это 2
min = 2
nom = 2
Третий проход по внутреннему циклу
j = 3
a[3]<2 (нет) // a[3] – значение элемента массива на третьей позиции, т. е a[3] это 5
Четвёртый проход по внутреннему циклу
j = 4
a[4]<2 (нет) // a[4] – значение элемента массива на четвёртой позиции, т. е a[4] это 8
Выходим из внутреннего цикла,  так как j на следующем проходе будет равно 5, по условию j<5
buf=9
a[1]=2
a[2]=9
По завершению второго прохода внешнего цикла, массив будет иметь вид:

Значение элемента массива (a[i])
1
2
9
5
8
Позиция (i)
0
1
2
3
4

Третий проход по внешнему циклу
i = 2 (i – позиция элемента массива)
min = 9
nom = 2
Первый проход по внутреннему циклу
j=2
a[2]<9(нет) // a[2] – значение элемента массива на второй позиции, т. е a[2] это 9
 Второй проход по внутреннему циклу
j = 3
a[3]<9 (да) // a[3] – значение элемента массива на третьей позиции, т. е a[3] это 5
min = 5
nom = 3
Третий проход по внутреннему циклу
j = 4
a[4]<5 (нет) // a[4] – значение элемента массива на четвёртой позиции, т. е a[4] это 8
Выходим из внутреннего цикла,  так как j на следующем проходе будет равно 5, по условию j<5
buf=9
a[2]=5
a[3]=9
По завершению третьего прохода внешнего цикла, массив будет иметь вид:

Значение элемента массива (a[i])
1
2
5
9
8
Позиция (i)
0
1
2
3
4

Четвёртый проход по внешнему циклу
i = 3 (i – позиция элемента массива)
min = 9
nom = 3
Первый проход по внутреннему циклу
j=3
a[3]<9(нет) // a[3] – значение элемента массива на третьей позиции, т. е a[3] это 9
 Второй проход по внутреннему циклу
j = 4
a[4]<9 (да) // a[4] – значение элемента массива на четвёртой позиции, т. е a[4] это 8
min = 8
nom = 4
Выходим из внутреннего цикла,  так как j на следующем проходе будет равно 5, по условию j<5
buf=9
a[3]=8
a[4]=9
По завершению четвёртого прохода внешнего цикла, массив будет иметь вид:

Значение элемента массива (a[i])
1
2
5
8
9
Позиция (i)
0
1
2
3
4

Выходим из внешнего цикла,  так как i на следующем проходе будет равно 4, по условию i<4

Строки for (j=0; j<5; j++)  printf("%4d",a[j]); выводят отсортированный массив на экран    

Популярные сообщения из этого блога

Использование сервисов Яндекс в педагогической деятельности

Сдвиг числа влево или вправо на один двоичный разряд

Задача №8 (Умение построить дерево игры по заданному алгоритму и обосновать выигрышную стратегию)