Алгоритм сортировки
массива по возрастанию методом прямого выбора может быть представлен так:
1. Просматривая массив
от первого элемента, найти минимальный элемент и поместить его на место первого
элемента, а первый — на место минимального.
2. Просматривая массив
от второго элемента, найти минимальный элемент и поместить его на место второго
элемента, а второй — на место минимального.
3. И так далее до предпоследнего
элемента.
Ниже представлена программа
сортировки массива целых чисел по возрастанию, диалоговое окно которой изображено
на рис. 5.15.
Рис. 5.15.
Диалоговое окно программы сортировки массива простым выбором
Процедура сортировки,
текст которой приведен в листинге 5.9, запускается нажатием кнопки Сортировка
(Button1). Значения элементов массива вводятся из ячеек компонента StringGrid1.
После выполнения очередного цикла поиска минимального элемента в части массива
процедура выводит массив в поле метки (Label2).
Листинг 5.9.
Сортировка массива простым выбором
procedure TForm1.ButtonlClick(Sender: TObject);
const
SIZE=10;
var
a:array[1..SIZE]
of integer;
min:integer;
{ номер минимального элемента в части
массива от i до верхней границы массива }
j:integer; { номер элемента, сравниваемого с минимальным }
buf:integer; { буфер, используемый при обмене элементов массива }
i,k:integer;
begin
// ввод массива
for
i:=l to SIZE do
a[i]:=StrToInt(StringGridl.Cells[i-1,0])
; Iabel2.caption:='';
for
i:=l to SIZE-1 do begin
{ поиск минимального элемента в части массива от а[1] до a[SIZE]} min:=i;
for
j:=i+l to SIZE do if a[j] < a [min]
then
min:=j;
{ поменяем местами a [min] и a[i] }
buf:=a[i];
a[i]:=a[min]; a[min]:=buf;
{ вывод массива }
for
k:=l to SIZE do
Label2.caption:=label2.caption+' '+IntTostr(a[k]);
Label2.caption:=label2.caption+#13;
end;
Label2.caption:=label2.caption+#13+'MaccMB отсортирован.';
end;
На рис. 5.16 приведено
диалоговое окно программы после завершения процесса сортировки.
Рис. 5.16. Диалоговое окно программы Сортировка массива