Сортировка представляет собой процесс упорядочения элементов в массиве в порядке возрастания или убывания их значений.
Рассмотрим процесс сортировки пузырьковым методом. Пусть необходимо отсортировать в порядке возрастания
Сравним первый элемент со вторым, если первый больше, поменяем их местами, затем второй с третьим и так далее. Самый большой окажется последним (всплывет). Эту операцию повторяем, но не до последнего, а до предпоследнего элемента. Еще повторяем.
Дано 7 3 5 4 2
Первый этап 3 5 4 2 7
Второй этап 3 4 2 5 7
Третий этап 3 2 4 5 7
Четвертый этап 2 3 4 5 7
Процесс обмена удовлетворяет следующему алгоритму
procedure TForm1.Button2Click(Sender: TObject);
Begin
n:=5;
for j:=1 to n-1 d
for i:=2 to n-j+1 do
if a[i-1]>a[i] then
Begin
buf:=a[i-1];
a[i-1]:=a[i];
a[i]:=buf;
end;
for i:=1 to n do
StringGrid1.Cells[i-1,0]:=IntToStr(A[i]);
end;
Многомерные массивы
В повседневной жизни довольно часто приходится иметь дело с информацией , которая представлена в табличной форме. В качестве примера рассмотрим программу, которая обрабатывает результаты спортивных соревнований.
Программа должна вычислять общее количество медалей, завоеванных представителями каждой страны и соответствующее количество очков (баллов), которое вычисляется по следующему правилу: за каждую золотую медаль команда получает три очка, за серебряную – два, за бронзовую –одно.
Компоненту StringGrid1 даем имя Tabl.
Дважды щелкнем на форме, откроется процедура в которой опишем зафиксированные ячейки таблицы.
procedure TForm1.FormCreate(Sender: TObject);
Begin
Tabl.Cells[0,0]:='Страна';
Tabl.Cells[1,0]:='Золотых';
Tabl.Cells[2,0]:='Серебряных';
Tabl.Cells[3,0]:='Бронзовых';
Tabl.Cells[4,0]:='Всего';
Tabl.Cells[5,0]:='Баллов';
Tabl.Cells[0,1]:='Австралия';
Tabl.Cells[0,2]:='Белоруссия';
Tabl.Cells[0,3]:='Великобритания';
Tabl.Cells[0,4]:='Германия';
Tabl.Cells[0,5]:='Италия';
Tabl.Cells[0,6]:='Китай';
Tabl.Cells[0,7]:='Корея';
Tabl.Cells[0,8]:='Куба';
Tabl.Cells[0,9]:='Нидерланды';
Tabl.Cells[0,10]:='Россия';
Tabl.Cells[0,11]:='США';
Tabl.Cells[0,12]:='Франция';
Tabl.Cells[0,13]:='Япония';
end;
Обработаем кнопку «Итоги».
procedure TForm1.Button1Click(Sender: TObject);
Var
c,r:integer; // номер колонки и строки
p:integer; // количество очков
m:integer; // номер строки с максимольным количеством очков
buf:array[0..5] of string; // буфер
i:integer; //номер строки во время сортировки
S:integer; // сумма
Begin
//обработка таблицы
for r:=1 to Tabl.RowCount do// цикл по строкам
begin // начало цикла по строкам
S:=0; // сначала сумма равна нулю
for c:=1 to 3 do // цикл по колонкам медалей внутри строки
if Tabl.Cells[c,r]<>'' // если количество медалей не равно нулю (не пустая ячейка)
then S:=S+StrToInt(Tabl.Cells[c,r]) // вычисляем сумму медалей
else Tabl.Cells[c,r]:='0'; // в случае пустой ячейки в нее пишем «0»
p:=3*StrToInt(Tabl.Cells[1,r])+
2*StrToInt(Tabl.Cells[2,r])+StrToInt(Tabl.Cells[3,r]); //количество очков