Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
auditseo
56 / 56 / 2
Регистрация: 10.03.2014
Сообщений: 73
1

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

26.04.2014, 21:57. Просмотров 494. Ответов 2
Метки нет (Все метки)

Помогите отсортировать составленный список по определенному полю, я пробовал методом пузырька, но не получается, просьба подсказать:

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 минут
Удалите тему, разобрался.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2014, 21:57
Ответы с готовыми решениями:

Сортировка двунаправленного списка
Посоветуйте пожалуйста адекватный метод сортировки двунаправленного списка. Я...

Сортировка двунаправленного линейного списка по алгоритму Хоара
ПОМОГИТЕ СРОЧНО!!!! нужно отсортировать двунаправленный линейный список по...

Получить указатель на элемент двунаправленного списка, добавить значение в начало списка и очистить его
Нужно создать двунаправленный список //вроде так, но не уверен struct...

Реализация Двунаправленного списка
Ребят, что он хочет от меня, ошибка компиляции, понять не могу в чем проблема,...

Очередь из двунаправленного списка
Вот мой двусвязный список : struct Num { int number; bool ring;...

2
Ev[G]eN
27.04.2014, 11:43
  #2
 Комментарий модератора 
Будьте добры, выложите Ваше решение.
Оно может кому-то пригодиться в дальнейшем.
Спасибо
0
auditseo
56 / 56 / 2
Регистрация: 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);  //отсортированный список выгружаем в файл
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2014, 11:49

Шаблон двунаправленного списка
Добрый день! Пишу программу &quot;библиотека&quot;, которая включает в себя типы данных...

Удаление из двунаправленного списка
Программа компилируется, добавляет элементы в список, но когда доходит до...

Swap для двунаправленного списка
Поменять просто значения узлов, не интересно. Я запутываюсь с ссылками....


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru