Глава 4 Типовые алгоритмы обработки информации
____________________________________________________________________
var
str, str_lat, str_kyr: string;
i: integer;
{Процедура сортировки методом вставок латиницы}
procedure insert(var str: string);
var
i, j: integer;
v: char;
begin
for i:= 2 to Length(str) do
begin
v:= str[i]; j:= i - 1;
{Условие выхода из цикла: найдено подходящее место для текущего элемента или достигнуто начало строки}
while (str[j] > v) and (j > 0) do
begin
str[j+1]:= str[j];
dec(j);
end;
str[j+1]:= v;
end;
end;
{Процедура сортировки методом вставок кириллицы}
procedure insert_kyr(var str: string);
var
i, j: integer;
v, v1: string[2];
291
4.1 Алгоритмы сортировки
____________________________________________________________________
begin
for i:= 3 to Length(str) do
begin
v:= Copy( str, i, 2);
j:= i - 2;
{Условие выхода из цикла: найдено подходящее место
для текущего элемента или достигнуто начало строки}
while (Copy(str, j, 2) > v) and (j > 0) do begin
v1:= Copy(str, j, 2); str[j+2]:= v1[1]; str[j+3]:= v1[2]; dec(j, 2);
end;
str[j+2]:= v[1]; str[j+3]:= v[2];
end;
end;
begin
str:= 'зжедгвбаhgfedcbaиклмнijklmn'; i:= 1;
str_lat:= ''; str_kyr:= '';
while i <= Length(str) do begin
if ord(str[i]) < 128 then
begin
292
Глава 4 Типовые алгоритмы обработки информации
____________________________________________________________________
str_lat:= str_lat + str[i]; inc(i);
end else begin
str_kyr:= str_kyr + Copy(str, i, 2); inc(i, 2);
end;
end;
writeln(UTF8ToConsole('Исходная строка: '),
UTF8ToConsole(str));
insert(str_lat); // сортировка латиницы insert_kyr(str_kyr); // сортировка кириллицы
str:= Concat(str_lat, str_kyr);
writeln(UTF8ToConsole('Отсортированная строка: '),
UTF8ToConsole(str));
writeln(UTF8ToConsole('Нажмите любую клавишу'));
readkey;
end.
Напишем программу сортировки массива строк методом вставок. В про-
грамме строки сортируются по первому символу строки. Например, если задан массив из 4 строк:
Яковлев
Петров
Сидоров
Алексеев
293
4.1 Алгоритмы сортировки
____________________________________________________________________
то программа выдаст массив в следующем виде:
Алексеев
Петров
Сидоров
Яковлев
program insertion_sort_array;
uses
CRT, FileUtil;
var
str: array of string;
i, n: integer;
{Процедура сортировки методом вставок}
procedure insert(var str: array of string); var
i, j: integer; stroka: string;
begin
for i:= 1 to High(str) do begin
stroka:= str[i]; j:= i - 1;
while (str[j][1] > stroka[1]) and (j >= 0) do begin
str[j+1]:= str[j]; dec(j);
end;
str[j+1]:= stroka;
294
Глава 4 Типовые алгоритмы обработки информации
____________________________________________________________________
end;
end;
begin
writeln(UTF8ToConsole('Введите количество строк в массиве')); readln(n);
SetLength(str, n); writeln(UTF8ToConsole('Введите '), n); writeln(UTF8ToConsole('строк(и) символов'));
for i:= 0 to n - 1 do
readln(str[i]);
writeln(UTF8ToConsole('Исходный массив строк'));
for i:= 0 to n - 1 do
writeln(str[i]);
insert(str);
writeln(UTF8ToConsole('Отсортированный массив строк: '));
for i:= 0 to n - 1 do
writeln(str[i]);
writeln(UTF8ToConsole('Нажмите любую клавишу'));
readkey;
end.
Отсортируем массив менеджеров (раздел 3.6.3.3. и 4.1.2) методом вставок:
program insertion_sort_file; uses
CRT, SysUtils, OutScr, FileUtil; type
manager= record
295