I want to sort my strings in a trhead but my programm keeps crashing without a usefull message.
void FarmSortWorker::processSort()
{
// FramContainer *park =& farm_container[i];
//park->setFarmName("test");
QMutex mutex;
mutex.lock();
quicksort(2, 4);
mutex.unlock();
emit finished();
}
void FarmSortWorker::quicksort(int leftIdx, int rightIdx)
{
if (leftIdx >= 0 && leftIdx <= farm_container.size() && rightIdx > leftIdx && rightIdx <= farm_container.size())
{
if(leftIdx < rightIdx)
{
int pivotIdx = divide(leftIdx, rightIdx);
quicksort(leftIdx, pivotIdx - 1);
quicksort(pivotIdx + 1, rightIdx);
}
}
}
void FarmSortWorker::swap(int leftIdx, int rightIdx)
{
if (leftIdx >= 0 && leftIdx <= farm_container.size() && rightIdx > leftIdx && rightIdx <= farm_container.size())
{
FramContainer temp = farm_container[leftIdx];
farm_container[leftIdx] = farm_container[rightIdx];
farm_container[rightIdx] = temp;
}
}
int FarmSortWorker::divide(int leftIdx, int rightIdx)
{
int l = leftIdx;
if (leftIdx >= 0 && leftIdx <= farm_container.size() && rightIdx > leftIdx && rightIdx <= farm_container.size())
{
int r = rightIdx - 1;
int pivot = (int) farm_container[rightIdx].getFarmName().at(0).toLatin1();
while (l <= r)
{
if((int) farm_container[l].getFarmName().at(0).toLatin1() < pivot)
{
++l;
}
else
{
this->swap(l, r);
--r;
}
}
this->swap(l, rightIdx);
}
return 1;
}
void FarmSortWorker::processSort()
{
// FramContainer *park =& farm_container[i];
//park->setFarmName("test");
QMutex mutex;
mutex.lock();
quicksort(2, 4);
mutex.unlock();
emit finished();
}
void FarmSortWorker::quicksort(int leftIdx, int rightIdx)
{
if (leftIdx >= 0 && leftIdx <= farm_container.size() && rightIdx > leftIdx && rightIdx <= farm_container.size())
{
if(leftIdx < rightIdx)
{
int pivotIdx = divide(leftIdx, rightIdx);
quicksort(leftIdx, pivotIdx - 1);
quicksort(pivotIdx + 1, rightIdx);
}
}
}
void FarmSortWorker::swap(int leftIdx, int rightIdx)
{
if (leftIdx >= 0 && leftIdx <= farm_container.size() && rightIdx > leftIdx && rightIdx <= farm_container.size())
{
FramContainer temp = farm_container[leftIdx];
farm_container[leftIdx] = farm_container[rightIdx];
farm_container[rightIdx] = temp;
}
}
int FarmSortWorker::divide(int leftIdx, int rightIdx)
{
int l = leftIdx;
if (leftIdx >= 0 && leftIdx <= farm_container.size() && rightIdx > leftIdx && rightIdx <= farm_container.size())
{
int r = rightIdx - 1;
int pivot = (int) farm_container[rightIdx].getFarmName().at(0).toLatin1();
while (l <= r)
{
if((int) farm_container[l].getFarmName().at(0).toLatin1() < pivot)
{
++l;
}
else
{
this->swap(l, r);
--r;
}
}
this->swap(l, rightIdx);
}
r
eturn 1;
}
farm_container is a QList& and has a size of 900.
How do I debug this correctly or what could the error be.
Thank you in advance.
问题是,在我的devide函数中,我返回了“ 1”而不是“ l”,因此我的数据透视元素始终为1。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.