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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Валентин^_^
10 / 10 / 2
Регистрация: 15.10.2009
Сообщений: 119
#1

Сортировка списка - C++

15.12.2011, 22:18. Просмотров 697. Ответов 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
void sort_train(Train *head)
{
    Train *buf;
 
    bool change;
    do
    {
        Train *p = head;
        change = false;
        for(p = head; p != NULL && p->next != NULL; p = p->next)
        {
            if(p->TrainNumber > p->next->TrainNumber)
            {
                buf = p->next;
                p->next = buf->next;
                buf->next = head;
                head = buf;
                change = true;
            }
        }
    }
    while(change);
}
Есть у кого рабочий пример?

Добавлено через 23 часа 16 минут
Ап. Отпишитесь кто сортировал списки
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2011, 22:18     Сортировка списка
Посмотрите здесь:

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xAtom
913 / 738 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
16.12.2011, 00:47     Сортировка списка #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Train* lsort(Train *lst) { 
   Train *ea, *eb, *prev, *tmp;                         
   for(tmp = NULL; lst != NULL; ){ 
       ea = lst; 
       lst = lst->next;  
       eb = tmp;
       prev = NULL; 
       while(eb  && ea->TrainNumber > eb->TrainNumber) {
             prev = eb;
             eb = eb->next;
       }
       if(! prev) {
              ea->next = tmp; 
              tmp = ea; 
       } else { 
              ea->next = eb; 
              prev->next = ea; 
       }
  };
   return tmp; 
}
Ну и вызывать так.
C++
1
2
3
Train* lst = NULL;
//.... тут добавляешь в список
lst = lsort(lst);  //вот так вызываешь
Yandex
Объявления
16.12.2011, 00:47     Сортировка списка
Ответ Создать тему
Опции темы

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