Ранжирование символьных массивов

Особенность цифровых вычислительных машин определяет представление любой нечисловой информации (буквы алфавитов, знаки) конкретными цифровыми комбинациями – кодами.

В кодовой таблице ASCII ANSI символы обозначаются десятичными триадами от 000 до 255. Традиционное расположение их в таблице – по возрастанию кодов:

· специальные символы;

· цифры;

· прописные буквы латинского алфавита (A – Z);

· строчные буквы латинского алфавита (a – z);

· прописные буквы русского алфавита (А – Я);

· строчные буквы русского алфавита (а – я).

Следовательно, первая буква конкретного алфавита имеет наименьший код из всех последующих, а последняя – наибольший. Коды прописных букв меньше, чем строчных, латинских – меньше русских. Это позволяет организовать сравнение и перебор символьной информации (их кодов) не только по каждой из позиций, но и их совокупностей.

Принципиально возможно ранжирование символьной информации в двух вариантах (рис. 9.15).

Ранжирование символьных массивов - student2.ru

Рис. 9.15. Варианты ранжирования символьной информации

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

Ранжирование символов в строке по алфавиту

В качестве метода поиска используем модифицированное «всплывание пузырька». Общая идея метода – непосредственное циклического сравнение кодов первого из элементов массива с кодами всех последующих. Если код текущего элемента меньше кода первого, то они меняются местами. Результат первого цикла сравнения – «всплывший» символ с минимальным кодовым значением (одна из начальных букв алфавита), позволяет уменьшить сортируемый массив на единицу (без первого отсортированного элемента), а затем повторять общую идею на сформированном предыдущим шагом укороченном массиве.

Упорядочение символов в строке по алфавиту рассмотрим на конкретной задаче (9.6) о символьной строке.

Постановка задачи

Дан одномерный символьный массив строчных букв кириллицы (строка) максимальным размером 30 элементов. Требуется упорядочить исходную строку по алфавиту.

Формирование математической модели

Исходные данные

BUF(N) – символьный массив;

N £ 30 – максимальный размер массива;

n – реальный размер массива (длина строки).

Модель массива BUF(n):

buf1 buf2 ... bufi ... bufn

i – текущий индекс массива;

i = i + 1 – закон изменения индекса;

1 Ранжирование символьных массивов - student2.ru i Ранжирование символьных массивов - student2.ru n – диапазон изменения номера i элемента.

Расчётные зависимости

bufmin1 = min(buf1, buf2,…, bufi,…, bufn);

buf1 = bufmin1;

bufmin2 = min(buf2,…, bufi,…, bufn);

buf2 = bufmin2;

bufmin i = min(bufi,…, bufn-1, bufn);

bufi = bufmin i;

bufmin n-1 = min(bufn-1,bufn);

bufn-1 = bufmin n-1;

Выбор метода решения

Решение задачи выполним модифицированным методом «пузырька». Он реализуется последовательностью:

· присвоить индексу внешнего цикла его начальное значение (i = 1) – зафиксировать номер i элемента bufi, с которым идет сравнение;

· присвоить индексу внутреннего цикла его начальное значение через внешний (j = i+1);

· сравнить зафиксированное значение bufi с текущим bufj (bufi > bufj);

· выполнить переприсваивание bufпр = bufi, bufi = bufj и bufj = bufпр, если условие выполняется;

· изменить индекс внутреннего цикла по закону j = j + 1;

· повторять три предыдущих пункта пока j £ n;

· изменить индекс внешнего цикла по закону i = i + 1;

· повторять предыдущие пункты, кроме первого, пока i £ n-1;

· прекратить решение при i > n-1.

Следовательно, в качестве метода решения необходимо выбрать структуру последовательно вложенных циклов арифметического типа с аналитическим изменением аргумента, внутренний из которых – смешанный вычислительный процесс (цикл с расположенным внутри него ветвлением) для перемещения минимального значения элементов в начало массива последовательно уменьшающейся длины.

Наши рекомендации