Сортировка линейного списка
От: boxter Россия  
Дата: 01.12.04 15:18
Оценка:
Помогите, пожалуйста.
Поставлена задача отсортировать линейный список, состоящий из структуры
struct NODE
{
 int num;
 struct NODE * next, * prev;
}

примечание: синтаксис языка Си

void ListSort(struct NODE * first)
{
    struct NODE *temp, *min, *search = first;
    while(search != 0)
    {
        temp = search;
        min = search;
        while(temp != 0)
        {
            if(temp->num < min->num)
                min = temp;
            temp = temp->next;
        }
        temp = search->next;
        if(search == first)
        {
            if(min == search->next)
            {
                first = min;
                if(min->next != 0)
                    min->next->prev = search;
                min->prev = 0;
                search->prev = min;
                search->next = min->next;
                min->next = search;
            }
            else if(search != min)
            {
                first = min;
                if(min->next != 0)
                    min->next->prev = min->prev;
                search->next = min->next;
                min->next = search;
                min->prev = search->prev;
                search->prev = min;
            }
        }
        else if(min == search->next)
        {
            search->prev->next = min;
            min->prev = search->prev;
            if(min->next)
                min->next->prev = search;
            search->prev = min;
            search->next = min->next;
            min->next = search;
        }
        else if(search != min)
        {
            search->prev->next = min;
            if(min->next)
                min->next->prev = min->prev;
            search->next = min->next;
            min->next = search;
            min->prev = search->prev;
            search->prev = min;
        }
        search = temp;
    }
}

теоретически должна работать, но практически не хочет
кто может посмотрите и попробуйте доработать, чтобы шло
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.