![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 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); } } |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Нужна помощь с сортировкой односвязных списков на 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 |