Понятно, что одна из важнейших работ в алгоритме построчного сканирования - сортировка. В связи с заведомо ограниченной разрешающей способностью растровых дисплеев (не более 2048) иногда целесообразно использовать чрезвычайно эффективный алгоритм сортировки методом распределяющего подсчета.
Для рассмотрения алгоритма предположим, что надо отсортировать числа, заданные в массиве с именем "Исходный_массив"; количество сортируемых чисел задается скаляром "Кол-во_чисел"; сортируемые числа J удовлетворяют условию:
|
Для сортировки потребуются описания:
int Max_число; /* Верхняя граница значений */int *Повтор; /* Длина этого массива = Max_число */int Кол_чисел; /* Кол-во сортируемых чисел */int *Исходный_массив; /* Длина этого массива >= Кол_чисел */int *Результат; /* Длина этого массива >= Кол_чисел */int ii,jj, kk; /* Рабочие переменные */- Обнуляется служебный массив для подсчета числа повторений исходных кодов.
- Сортируемый массив просматривается и вычисляется количество раз повторений каждого числа:
- Суммируется количество повторений каждого числа, так что значение Повтор[J] даст начальное расположение группы чисел, равных J, в отсортированном массиве:
- Просматривается исходный массив и числа из него заносятся в массив результатов той же длины. Индекс занесения числа J в массив результатов равен значению J-го элемента массива Повтор. После занесения числа J значение Повтор[J] уменьшается на 1: