В рассмотренном ниже алгоритме последовательно выбирается минимальный элемент в подмассивах
; в связи с этим данный метод группировки можно назвать также методом выделения минимального элемента.
Последовательность реализации алгоритма:
1) Просматриваем массив
и определяем индекс
минимального элемента. Если
, то выполняем обмен элементов
и
.
2) Просматриваем подмассив
и определяем индекс
минимального элемента. Если
, то выполняем обмен элементов
и
.
3) То же по отношению к подмассиву
и т.д.
Последним подмассивом, подвергающимся просмотру, является подмассив
.
Program MinElem;
Const Nmax = 500;
TypeAr = array[1..Nmax] of real;
Var i,j,n,k : word;
Xmin : real;
X : Ar;
Begin
Ввод и печать n, X
For i:=1 to n-1 do
Begin
Xmin:=x[i]; k:=i;
Forj:=i+1 to n do{ определение индекса k }
If x[j]<Xmin then{ мин.элемента в подмассиве }
Begin{ xi, xi+1, ..., xn }
Xmin:=x[j]; k:=j
End;
If k>i then{ обмен элементов }
Begin{ xn и xk }
x[k]:=x[i]; x[i]:=Xmin
End;
End;
Печать массива Х
End.
Здесь внешний цикл - перебор подмассивов; внутренний - поиск минимального элемента в подмассиве. Количество выполнений внешнего и внутреннего циклов не зависит от исходной упорядоченности массива
.
Примечание. Аналогичным образом можно реализовать метод прямой выборки путем выделения максимального элемента в последовательных подмассивах.