Сортировка двусвязного списка - C (СИ) (69635)

Узнай цену своей работы

Формулировка задачи:

Не получается выполнить сортировку двусвязного списка методом пузырька. У меня получилось сделать только один заход, а их надо несколько.
Листинг программы
  1. struct LIST
  2. {
  3. int info;
  4. LIST* next;
  5. LIST* prev;
  6. };
  7. void sort(LIST *i, LIST *start, LIST *last)
  8. {
  9. int tmp=0;
  10. i=start;
  11. if((i->info)>(i->next->info))
  12. {
  13. tmp=i->info;
  14. i->info=i->next->info;
  15. i->next->info=tmp;
  16. }
  17. }

Решение задачи: «Сортировка двусвязного списка»

textual
Листинг программы
  1. void sort(LIST *start)
  2. {
  3.     LIST *tmp;
  4.     LIST *a;
  5.     int t=0;
  6.     bool flag=1;
  7.     while(flag==1)
  8.     {
  9.         tmp=start;
  10.         a=tmp->next;
  11.         flag=0;
  12.         while(a)
  13.         {
  14.             if((tmp->info)>(a->info))
  15.             {
  16.                 t=tmp->info;
  17.                 tmp->info=a->info;
  18.                 a->info=t;
  19.                 flag=1;
  20.             }
  21.             tmp=tmp->next;
  22.             a=a->next;
  23.         }
  24.     }
  25. }

Объяснение кода листинга программы

  1. Функция сортировки списка sort принимает двусвязный список start в качестве аргумента.
  2. В функции используются следующие переменные:
    • tmp - временная переменная для хранения текущего элемента списка.
    • a - переменная для хранения следующего элемента списка.
    • t - временная переменная для обмена значениями.
    • flag - флаг для контроля цикла.
  3. В цикле while происходит проход по списку до тех пор, пока флаг не станет равным 0.
  4. Внутри цикла находятся два вложенных цикла while:
    • Внешний цикл проходит по всем элементам списка, начиная с start.
    • Внутренний цикл проходит по всем элементам списка, начиная с a.
  5. Внутренний цикл сравнивает значения элементов tmp и a и, если значение tmp больше значения a, меняет их местами и устанавливает флаг flag равным 1.
  6. После выхода из внутреннего цикла while происходит переход к следующему элементу списка: tmp=tmp->next и a=a->next.
  7. Если после прохода по всем элементам списка флаг flag не изменился, значит список уже отсортирован.
  8. Функция возвращает start - отсортированный список.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы