русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Алфавитная сортировка

Сортировка символьной информации отличается от сортировки числовых данных тем, что здесь следует учитывать при сравнении символов их лексикографическую упорядоченность в таблице кодов ASCI. Здесь возможны два варианта:

- символы используемого алфавита имеют упорядоченные коды ASCI

- символы используемого алфавита не имеют упорядоченные коды ASCI;

Возможно использование сравнительных и распределительных методов.

Первый способ применим для случая, если известно, что символы используемого алфавита имеют упорядоченные коды ASCI, например буквы русского и латинского алфавитов, цифры.

Пример.

Требуется упорядочить по фамилии записи учета граждан. Запись имеет структуру:

= ФИО (FIO) – до 30 символов

= год рождения (GR) – диапазон от 1928 до 2005

Для этого используем сравнительную сортировку.

program sort;

const M=50;

type

INF=record

FIO :string[30];

GR :1928..2005;

end;

var

X :array[1..M] of inf;

N :integer;

FLAG:0..1;

T :INF;

I,J :integer;

begin

write('ВВЕДИТЕ К-ВО ЗАПИСЕЙ: ');

readln(N);

writeln('МАССИВ ДО СОРТИРОВКИ');

for I:=1 to N do

with X[I] do

begin

write('ВВЕДИТЕ FIO ',I,'-Й ЗАПИСИ ');READLN(FIO);

write('ВВЕДИТЕ GR ',I,'-Й ЗАПИСИ ');READLN(GR);

end;

J:=1;

repeat

FLAG:=0;

for I:=1 to N-J do

begin

if X[I].FIO > X[I+1].FIO then

begin

T:=X[I];

X[I]:=X[I+1];

X[I+1]:=T;

FLAG:=1;

end;

end;

J:=J+1

until FLAG=0;

writeln('МАССИВ ПОСЛЕ СОРТИРОВКИ');

for I:=1 to N do

with X[I] do

begin

writeln('ФАМИЛИЯ : ',FIO);

writeln('ГОД : ',GR);

end;

end.

Второй случай. Предполагается, что для всех символов используемого алфавита нельзя предусмотреть строго упорядоченный интервальный тип в заданном диапазоне порядковых позиций по таблице кодов ASCI, как, например, для цифр.

Первый способ.

А) Для символов произвольного алфавита можно применить перечисляемый тип и использовать тот факт, что в перечисляемом типе элементы упорядочены в порядке перечисления.

В случае сортировки текста в Турбо-Паскаль не нужно задавать строку образа упорядочения символов типа DATA, так как их порядковые позиции уже упорядочены в таблице кода ASСI

Используем распределительную(поразрядную) сортировку.

program sort;

const M=50;

type

INF=record

FIO :string[30];

GR :1926..1998;

end;

var

X :array[1..M] of inf;

N :integer;

FLAG :0..1;

T :INF;

I,J:integer;

L,L1,L2:integer;

DATA:string[72];

begin

write('ВВЕДИТЕ К-ВО ЗАПИСЕЙ: ');

readln(N);

writeln('МАССИВ ДО СОРТИРОВКИ');

for I:=1 to N do

with X[I] do

begin

write('ВВЕДИТЕ FIO ',I,'-Й ЗАПИСИ ');READLN(FIO);

write('ВВЕДИТЕ GR ',I,'-Й ЗАПИСИ ');READLN(GR);

end;

DATA:='АаБбВвГгДдЕеЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщъыьЭэЮюЯя';

repeat

FLAG:=0;

for I:=1 to N-1 do

begin

L1:=length(X[I].FIO);

L2:=length(X[I+1].FIO);

if L1>=L2 then

L:=L1

else

L:=L2;

J:=1;

while (pos(X[I].FIO[J],DATA)=

pos(X[I+1].FIO[J],DATA)) and (J<L) do J:=J+1;

if pos(X[I].FIO[J],DATA) >

pos(X[I+1].FIO[J],DATA) then

begin

T:=X[I];

X[I]:=X[I+1];

X[I+1]:=T;

FLAG:=1;

end;

end;

until FLAG=0;

writeln('МАССИВ ПОСЛЕ СОРТИРОВКИ');

for I:=1 to N do

with X[I] do

begin

writeln('ФАМИЛИЯ : ',FIO);

writeln('ГОД : ',GR);

end;

end.

Б) Второй способ. Задачу сведем к сравнительному методу сортировки. Метод основан на вычислении и сортировке рангов исходного символьного массива, указывающих на место отдельной строки в отсортированном списке. Для этого необходимо выполнить предварительную работу по созданию таблицы рангов упорядоченных последовательностей символов.

Рассмотрим на примере букв русского алфавита и символа пробела. Пусть трубуется сортировать символьный массива X, содержащий

N строк по М символов в строке на заданную глубину G.

1 2 3 ... M

-------------------------------------

.

.

.

N

Для букв русского алфавита ранг R будем вычислять по следующей формуле

Сортировку можно организовать в два этапа:

1) вычисление ранга для каждой строки

2) сортировка строк по рангу.

Просмотров: 564


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.