Сортировка целого массива группировкой с последовательным упорядочиванием битов - C (СИ)
Формулировка задачи:
Доброго времени суток! Помогите разобраться со след. заданием.
Сортировка целого массива группировкой с последовательным упорядочиванием
битов.
Решение задачи: «Сортировка целого массива группировкой с последовательным упорядочиванием битов»
textual
Листинг программы
typedef struct slist_ { long val; struct slist_ *next; } slist; // функция сортировки возвращает указатель на начало отсортированного списка slist *radix_list(slist *l, int t) { // t - разрядность (максимальная длина числа) int i, j, d, m=1; slist *temp, *out, *head[10], *tail[10]; out=l; for (j=1; j<=t; j++) { for (i=0; i<=9; i++) head[i] = (tail[i]=NULL); while ( l != NULL ) { d = ((int)(l->val/m))%(int)10; temp = tail[d]; if ( head[d]==NULL ) head[d] = l; else temp->next = l; temp = tail[d] = l; l = l->next; temp->next = NULL; } for (i=0; i<=9; i++) if ( head[i] != NULL ) break; l = head[i]; temp = tail[i]; for (d=i+1; d<=9; d++) { if ( head[d] != NULL) { temp->next = head[d]; temp = tail[d]; } } m*=10; } return (out); }
Объяснение кода листинга программы
Список элементов, которые описывают работу данного кода:
- Структура slist:
long val
- хранит значение элемента списка.struct slist_ *next
- указывает на следующий элемент в списке.
- Функция radix_list:
- принимает два аргумента:
slist *l
- список, который необходимо отсортировать, иint t
- разрядность, или максимальная длина числа. - возвращает указатель на начало отсортированного списка.
- выполняет сортировку списка по битам с использованием алгоритма сортировки подсчетом.
- использует дополнительные переменные:
int i, j, d, m=1;
- для контроля перебора элементов списка и установки начальных значений.slist *temp, *out, *head[10], *tail[10];
- для временного хранения элементов списка и организации работы со списком.
- принимает два аргумента:
- Основной цикл функции radix_list:
- выполняется
t
итераций, гдеt
- разрядность. - на каждой итерации происходит сортировка списка по текущему разряду чисел.
- используется вложенный цикл для распределения элементов списка по группам.
- после завершения сортировки, возвращается указатель на начало отсортированного списка.
- выполняется
- Дополнительные действия после сортировки:
- Если список пуст, то возвращается исходный список.
- Если в списке остались элементы, то выполняется сортировка по следующему разряду чисел.
- Переменная
m
увеличивается в 10 раз для перехода к следующему разряду.
- Вывод:
- Отсортированный список возвращается в качестве результата работы функции.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д