Сортировка двусвязного списка - 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
- отсортированный список.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д