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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2009, 18:50   #1
lacost
Пользователь
 
Регистрация: 25.03.2007
Сообщений: 67
По умолчанию Сортировка двунаправленного динамического списка

Не могу сообразить алгоритм для сортировки двунаправленного динамического списка, подскажите плз, или может у кого-то завалялся с первого курса
lacost вне форума Ответить с цитированием
Старый 07.05.2009, 20:32   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Алгоритм?
1. Создаем дополнительный список (пустой)
2. Ищем минимальный элемент в списке.
3. Заносим в дополнительный список этот элемент
4. Удаляем найденный элемент из исходного списка
5. Идем на шаг 2, пока не пройдем весь список

ПыСы: в доп список добавлять в конец))
MaTBeu вне форума Ответить с цитированием
Старый 08.05.2009, 07:52   #3
lacost
Пользователь
 
Регистрация: 25.03.2007
Сообщений: 67
По умолчанию

спасибо
lacost вне форума Ответить с цитированием
Старый 08.05.2009, 10:32   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

функция сортировки кольцевого двунаправленного списка

Код:
void Node::SortRing ()

{
	Ring *begin,*elem,*elem1,*p,*s,*n; // Ring - класс реализующий список

	begin=ring; // ring - голова кольцевого списка
	elem=ring;
		
	while(elem->Next!=begin)

	{
		elem1=elem->Next;
		p=elem->Prev;
					
		while(elem1!=begin) // 1

		{
			n=elem;
			s=elem1->Next;

			if(strcmp(elem->GetStr(),elem1->GetStr())<=0)

			{
				elem1=elem1->Next;
				s=elem1->Next;
			}

			else //1

			{
				if(elem1==elem->Prev)

				{
					s=elem->Next;
					p=elem1->Prev;

					ring=elem1;
					begin=ring;
					elem->Prev=p;
					p->Next=elem;
					elem1->Next=s;
					s->Prev=elem1;
					elem->Next=elem1;
					elem1->Prev=elem;
					
					p=elem->Prev;
					s=elem1->Next;
					n=elem;
				}

				else // 2
				
				{
					if(elem==ring)

					{
						ring=elem1;
						begin=ring;
					}

					elem->Prev=elem1->Prev;
					elem1->Prev->Next=elem;
					elem1->Next=elem->Next;
					elem->Next->Prev=elem1;
					elem->Next=s;
					s->Prev=elem;
					elem1->Prev=p;
					p->Next=elem1;
				
					elem=elem1;
					n=elem;
					elem1=s;
				}// else 2
			}//else 1
		}// while 1
		p=elem;
		elem=n->Next;
	}
}
counter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка динамического списка new_sergei Помощь студентам 1 19.12.2008 00:36
Сортировка списка... Arkuz Помощь студентам 2 11.05.2008 00:53
Сортировка списка... Arkuz Компоненты Delphi 4 03.05.2008 23:21
Заполнение динамического списка из файла KORT Помощь студентам 2 01.05.2007 22:28