Сортировка двусвязного списка - C (СИ) (69635)
Формулировка задачи:
Не получается выполнить сортировку двусвязного списка методом пузырька. У меня получилось сделать только один заход, а их надо несколько.
struct LIST { int info; LIST* next; LIST* prev; }; void sort(LIST *i, LIST *start, LIST *last) { int tmp=0; i=start; if((i->info)>(i->next->info)) { tmp=i->info; i->info=i->next->info; i->next->info=tmp; } }
Решение задачи: «Сортировка двусвязного списка»
textual
Листинг программы
void sort(LIST *start) { LIST *tmp; LIST *a; int t=0; bool flag=1; while(flag==1) { tmp=start; a=tmp->next; flag=0; while(a) { if((tmp->info)>(a->info)) { t=tmp->info; tmp->info=a->info; a->info=t; flag=1; } tmp=tmp->next; a=a->next; } } }
Объяснение кода листинга программы
- Функция сортировки списка
sort
принимает двусвязный списокstart
в качестве аргумента. - В функции используются следующие переменные:
tmp
- временная переменная для хранения текущего элемента списка.a
- переменная для хранения следующего элемента списка.t
- временная переменная для обмена значениями.flag
- флаг для контроля цикла.
- В цикле
while
происходит проход по списку до тех пор, пока флаг не станет равным 0. - Внутри цикла находятся два вложенных цикла
while
:- Внешний цикл проходит по всем элементам списка, начиная с
start
. - Внутренний цикл проходит по всем элементам списка, начиная с
a
.
- Внешний цикл проходит по всем элементам списка, начиная с
- Внутренний цикл сравнивает значения элементов
tmp
иa
и, если значениеtmp
больше значенияa
, меняет их местами и устанавливает флагflag
равным 1. - После выхода из внутреннего цикла
while
происходит переход к следующему элементу списка:tmp=tmp->next
иa=a->next
. - Если после прохода по всем элементам списка флаг
flag
не изменился, значит список уже отсортирован. - Функция возвращает
start
- отсортированный список.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д