Сортировка двусвязного списка - 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;
        }
    }
}

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

  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
Похожие ответы