[英]C++ Qt Using Quicksort to sort strings alphabetical
I want to sort my strings in a trhead but my programm keeps crashing without a usefull message. 我想在trhead中对字符串进行排序,但是我的程序不断崩溃,没有有用的消息。
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. farm_container是QList&,大小为900。
How do I debug this correctly or what could the error be. 我如何正确调试此错误或可能是什么错误。
Thank you in advance. 先感谢您。
问题是,在我的devide函数中,我返回了“ 1”而不是“ l”,因此我的数据透视元素始终为1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.