연습으로 템플릿에 quicksort 알고리즘을 구현했으며 요소 수가 적은 (최대 약 760 개) 벡터에 대해서는 "잘 작동하지만"요소 수가 많으면 seqfault를 제공합니다. 다른 사람이 내가 잘못하고있는 것을 말해 줄 수 있습니까?Segfault가 벡터를 정렬하는 동안
template< typename Vector, typename VecElem > void qsort(Vector *pv)
{
if (pv->size()<=1) return;
VecElem p;
Vector *pvl=new Vector,*pvr=new Vector;
p = pv->back();
pv->pop_back();
pvr->push_back(p);
for (auto it=pv->begin();it!=pv->end();it++)
{
if (*it < p) pvl->push_back(*it);
else pvr->push_back(*it);
}
qsort<Vector,VecElem>(pvl);
qsort<Vector,VecElem>(pvr);
if (pvl->size()) *pv = *pvl;
if (pvr->size()) std::copy(pvr->begin(), pvr->end(), std::back_inserter(*pv));
delete pvl;
delete pvr;
}
당신이 힙에 임시 벡터를 할당하는 이유는 무엇입니까? –
재귀가 너무 깊어서 사용 가능한 모든 스택 공간을 소모합니다. – DCoder
새 벡터를 만드는 대신 반복기 또는 인덱스를 사용하십시오. – andre