Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2016, 21:40   #1
dylanross
Новичок
Джуниор
 
Регистрация: 31.05.2016
Сообщений: 2
Вопрос Ошибка при сортировке односвязного списка

Здравствуйте, уважаемые пользователи форума. .
Нужно отсортировать элементы структуры односвязного списка.
Я воспользовался методом пузырька (код ниже). Но проблема в том, что при сортировке, меняются местами данные одного информационного поля, а остальная информация элемента сохраняет свою позицию.

Пример:

Имя / Возраст
------------------
Саша / 15
Ваня / 14

В данном случае, если перенести 14 наверх, а 15 - вниз, получится:

Имя / Возраст
------------------
Саша / 14
Ваня / 15



Структура:

Код:
struct Squad { 
    int Number, Age; 
    string Name, Position, Country; 
    double Transfer;
        Squad *next; //указатель на следующий элемент в списке
};
Функция сортировка пузырьком (сортировка по переменной Number):

Код:
void Sort(Squad *Head) { // пузырьковая сортировка
 
Squad *head = Head;
Squad *Element1, * Element2;
int buf;
 
    for( Element1 = head; Element1; Element1 = Element1->next )
    for( Element2 = head; Element2; Element2 = Element2->next )
            if( Element1->Number < Element2->Number ) {
 
                buf = Element1->Number. ;
                Element1->Number = Element2->Number;
                Element2->Number = buf;
 
        }
 
 }

Как преобразовать функцию, чтобы после свапе одних ячеек, автоматически свапались другие?
dylanross вне форума Ответить с цитированием
Старый 31.05.2016, 22:07   #2
dylanross
Новичок
Джуниор
 
Регистрация: 31.05.2016
Сообщений: 2
По умолчанию

Разобрался.

С самого начала пытался сделать так, но похоже поторопился, накосячил и забил.

Код:
void Sort(Squad *Head) { // пузырьковая сортировка

Squad *head = Head;
Squad *Element1, *Element2, *bufElement;

    for( Element1 = head; Element1; Element1 = Element1->next )
    for( Element2 = head; Element2; Element2 = Element2->next )
            if( Element1->Number < Element2->Number ) {

                int buf1 = Element1->Number;
                Element1->Number = Element2->Number;
                Element2->Number = buf1;

                string buf2 = Element1->Name;
                Element1->Name = Element2->Name;
                Element2->Name = buf2;


                int buf3 = Element1->Age;
                Element1->Age = Element2->Age;
                Element2->Age = buf3;

                string buf4 = Element1->Position;
                Element1->Position = Element2->Position;
                Element2->Position = buf4;

                string buf5 = Element1->Country;
                Element1->Country = Element2->Country;
                Element2->Country = buf5;

        }
 }

/THREAD
dylanross вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при сортировке Fenix1987 БД в Delphi 2 22.06.2012 10:20
Ошибка в сортировке списка greend Общие вопросы C/C++ 3 15.10.2011 16:50
Ошибка при сортировке Chikanog Microsoft Office Access 2 05.01.2011 13:08
Не могу понять где ошибка при сортировке строки!? Dema91 Помощь студентам 1 14.04.2010 20:11
Ошибка в сортировке линейного списка, помогите пожалуйста найти Loginanton Паскаль, Turbo Pascal, PascalABC.NET 2 31.12.2008 15:01