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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2008, 20:33   #1
Grind
Пользователь
 
Регистрация: 18.02.2008
Сообщений: 17
По умолчанию Проблемма с быстой сортировкой связанных списков

Проблемма возникает после 2го(вроде) рекурсивного вызова.
Debugger говорит, что "stack overflow", т.е. стек переполнен.

Если кто-нибудь может, укажите на причину.
Заранее спасибо.

Код функции:
void quick_sort(GoodPtr *sPtr, int n)// sPtr указатель на начало списка, n количество элементов в списке
{
int temp,p,q=0,w=n,cp,qp,wp;
GoodPtr qcurPtr,wcurPtr,qprePtr,wprePtr,che ckPtr,tempPtr;

checkPtr=*sPtr;
cp=0;

while(cp<n/2)
{
checkPtr=checkPtr->nextPtr;
cp++;
}

//---------------------------------- процедура разделения
q=0;
w=n;

do
{
qcurPtr=*sPtr;
wcurPtr=*sPtr;

qprePtr=NULL;
wprePtr=NULL;

/*qp=0;
while(qp<q)
{
qprePtr=qcurPtr;
qcurPtr=qcurPtr->nextPtr;
qp++;
}*/

while(strcmp(qcurPtr->title,checkPtr->title)<0)
{
qcurPtr=*sPtr;
qprePtr=NULL;

qp=0;
while(qp<q)
{
qprePtr=qcurPtr;
qcurPtr=qcurPtr->nextPtr;
qp++;
}
q++;
}

wp=0;
while(wp<w)
{
wprePtr=wcurPtr;
wcurPtr=wcurPtr->nextPtr;
wp++;
}

while(strcmp(wcurPtr->title,checkPtr->title)>0)
{
wcurPtr=*sPtr;
wprePtr=NULL;

wp=0;
while(wp<w)
{
wprePtr=wcurPtr;
wcurPtr=wcurPtr->nextPtr;
wp++;
}
w--;
}

if (q<=w)
{
if(qprePtr==NULL && qcurPtr->nextPtr!=wcurPtr) //temp = a[i]; a[i] = a[j]; a[j] = temp;
{
tempPtr=wcurPtr->nextPtr;
*sPtr=wcurPtr;
wcurPtr->nextPtr=qcurPtr->nextPtr;
wprePtr->nextPtr=qcurPtr;
qcurPtr->nextPtr=tempPtr;
}
else if(qprePtr==NULL && qcurPtr->nextPtr==wcurPtr)
{
*sPtr=wcurPtr;
qcurPtr->nextPtr=wcurPtr->nextPtr;
wcurPtr->nextPtr=qcurPtr;
}
else if(qprePtr!=NULL && qcurPtr->nextPtr!=wcurPtr)
{
tempPtr=qcurPtr->nextPtr;
qprePtr->nextPtr=wcurPtr;
wprePtr->nextPtr=qcurPtr;
qcurPtr->nextPtr=wcurPtr->nextPtr;
wcurPtr->nextPtr=tempPtr;
}
else if(qprePtr!=NULL && qcurPtr->nextPtr==wcurPtr)
{
tempPtr=qcurPtr;
qprePtr->nextPtr=wcurPtr;
qcurPtr->nextPtr=wcurPtr->nextPtr;
wcurPtr->nextPtr=tempPtr;
}

q++; w--;

system("cls");
puts("\n\n*TEST!*\n\n");
output(*sPtr);
fflush(stdin);
getchar();
}
}
while ( q<=w );

// рекурсивные вызовы, если есть, что сортировать
if (w>0)
quick_sort(sPtr, w);

GoodPtr next_sort;
int ns=0;

next_sort=*sPtr;

while(ns<q)
{
next_sort=next_sort->nextPtr;
ns++;
}

if (n>q)
quick_sort(&next_sort, n-q);

if(w==0 && q==n)
{
printf("\n*succefully sorted*\n");
output(*sPtr);
}
}
Grind вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь с сортировкой односвязных списков на Pascal Lesowik Помощь студентам 2 22.05.2011 06:14
проблема с SQL-запросом в связанных таблицах kopernik21187 Общие вопросы Delphi 5 16.09.2008 10:33
Помогите с сортировкой AHTOXA Общие вопросы Delphi 2 08.06.2007 12:46
Помогите с сортировкой radist Паскаль, Turbo Pascal, PascalABC.NET 5 23.04.2007 12:50