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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2009, 00:24   #1
Attenti_ON
Новичок
Джуниор
 
Регистрация: 15.10.2008
Сообщений: 2
По умолчанию [C++] Шейкер-сортировка двусвязного списка

Здравствуйте!
У меня возникла проблема с сортировкой двусвязного списка.

Получилось реализовать двусвязный список и отдельно Шейкер-сортировку (массива).

Помогите, пожалуйста, отсортировать список!

При сортировке элементов списка нужно использовать не перестановку значений полей данных, а изменение значений полей указателей (перенаправление связей между звеньями списка)

Вот мой список:
Код:
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
//---------------------------------------------------------------------------
struct Color
{
	int Name;
	Color *Next;
        Color *Pred;
};
Color *Head = NULL;
Color *Rear = NULL;
Color *Ptr = NULL;

//-------------------------------------------------------------------
void Create(int Name)
{
	Color *NewPtr;
	NewPtr = new Color;
	if (!Head) Head = NewPtr;
	else Rear->Next = NewPtr;
        NewPtr->Pred = Rear;
        NewPtr->Name = Name;
        NewPtr->Pred=Rear;
        Rear = NewPtr;
	Rear->Next = NULL;
}
//---------------------------------------------------------------------
void Print(void)
{
	Color *Index = Head;
	while (Index)
	{
		cout << Index->Name << endl;
		Index = Index -> Next;
	}
	cout<<endl;
}
//--------------------------------------------------------------------
void Clear()
{
Rear == NULL;
	while (Head)
	{
		Ptr = Head -> Next;
		delete Head;
		Head = Ptr;
	}
}
//----------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
char newname[10];
Create(6);
Create(2);
Create(3);
Create(5);
Create(3);
Create(2);
Create(9);
Create(1);

Print();
cout<<endl;
Clear();
getch();
	return 0;
}
И реализация Шейкер-сортировки:

Код:
int ilast = n - 1;
int ll = 1;
int kk = n - 1;
  do {
         for (j = kk; j >=ll; j--)
           if (a[j-1]>a[j])
             {
                temp = a[j];
                a[j] = a[j-1];
                a[j-1] = temp;
                ilast = j;
             }
        ll = ilast + 1;
         for (j = ll; j<=kk; j++)
           if (a[j-1]>a[j])
             {
                temp = a[j];
                a[j] = a[j-1];
                a[j-1] = temp;
                ilast = j;
             } 
        kk = ilast - 1; }
   while (ll < kk);
Attenti_ON вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка Шелла и Шейкер-сортировка AleksandrMakarov Паскаль, Turbo Pascal, PascalABC.NET 11 11.03.2012 12:18
Ошибка при создании головного элемента двусвязного списка Дамир Помощь студентам 1 16.11.2008 16:09