Форум программистов, компьютерный форум CyberForum.ru

Сортировка двунаправленного списка - C++

Восстановить пароль Регистрация
 
auditseo
55 / 55 / 0
Регистрация: 10.03.2014
Сообщений: 73
26.04.2014, 21:57     Сортировка двунаправленного списка #1
Помогите отсортировать составленный список по определенному полю, я пробовал методом пузырька, но не получается, просьба подсказать:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void uploadFileRating(Film **first, Film **close){   
    Film *external = *first; //Внейшний на одно приращение
    Film *tmp; 
    Film *interior; //Внутренний, который будет пробегать по всему списку
    while (external->next)    
    {
        interior = external->next;
        while (interior)
        {
            if(external->rating < interior->rating){
                tmp = external->next->pred; 
                if (external->pred == 0){
                    *first = interior;
                }
                if (interior->next == 0){
                    *close = external;
                }
                    external->next = interior->next;
                    interior->next = external;
                    external->pred = interior;                   
                    interior->next->pred = external;
                    external = tmp;                  
        }
            interior = interior->next;
        }
       external = external->next;
    }     
}
Добавлено через 1 час 27 минут
Удалите тему, разобрался.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2014, 21:57     Сортировка двунаправленного списка
Посмотрите здесь:

Сортировка двунаправленного списка C++
C++ Сортировка двунаправленного линейного списка по алгоритму Хоара
C++ Реализовать классы фигур и поместить в контейнер на основе двунаправленного линейного списка
Swap для двунаправленного списка C++
Вложенные структуры. Ошибка с создании вложенного двунаправленного списка C++
"Сортировка двусвязного списка путем исключения элемента с минимальным значением и включения его в начало нового списка C++
C++ Нахождение и изменение элемента двунаправленного кольцевого списка
C++ Удаление из двунаправленного списка

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ev[G]eN
27.04.2014, 11:43
  #2
 Комментарий модератора 
Будьте добры, выложите Ваше решение.
Оно может кому-то пригодиться в дальнейшем.
Спасибо
auditseo
55 / 55 / 0
Регистрация: 10.03.2014
Сообщений: 73
27.04.2014, 11:49  [ТС]     Сортировка двунаправленного списка #3
Без проблем:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void FileRating(Film **first, Film **close){    //функция сортировки списка по рейтингу фильмов
    Film *tmpExternal = *first; //"внешний" указатель - который будет параметром первого цикла
    Film *tmpExternalSave;  //сохраняем tmpExternal     
    Film *tmpInterior; //"внутренний" указатель - парамет вложенного цикла
    while (tmpExternal->next)     
    {
        tmpExternalSave = tmpExternal->next; //сохраняем следующий "внешний" указатель
        tmpInterior = tmpExternal->next; //"внутренний" указатель, т.е. с какого параметра начинается вложенный цикл
        while (tmpInterior)       
        {           
            if (tmpExternal->rating < tmpInterior->rating){  //сравнение поля рейтинг
                
                if(tmpExternal->pred == 0){   //если "взятая" структура первая в списке
                    *first = tmpExternal->next;                                    
                }
                else tmpExternal->pred->next = tmpExternal->next;
 
                if(tmpInterior->next == 0){   //если структура, после которой вставляется "взятая" структура, последняя в списке 
                    *close = tmpExternal;
                }
                else tmpInterior->next->pred = tmpExternal;           
                tmpExternal->next->pred = tmpExternal->pred;     
                tmpExternal->next = tmpInterior->next;     
                tmpInterior->next = tmpExternal;                          
                tmpExternal->pred = tmpInterior;
                tmpInterior = tmpExternal->next;   //берем след. структуру для сравнения
                } 
            else tmpInterior = tmpInterior->next;  //берем след. структуру для сравнения                        
            }
        tmpExternal = tmpExternalSave; //берем след. структуру, которая "пробежит" по списку        
     }
    uploadFileTxt(*first);  //отсортированный список выгружаем в файл
}
Yandex
Объявления
27.04.2014, 11:49     Сортировка двунаправленного списка
Ответ Создать тему
Опции темы

Текущее время: 10:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru