C++Qt使用Quicksort按字母顺序对字符串进行排序
C++ Qt Using Quicksort to sort strings alphabetical
我想在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是QList&并且具有900。
我该如何正确调试,或者错误可能是什么。
提前谢谢。
问题是,在我的devide函数中,我返回了一个"1"而不是"l",所以我的pivot元素总是1。
相关文章:
- 对字符串进行排序时,在c++中处理sort()
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 按字母顺序对字符串中的字母进行排序,而无需使用内置的 sort()
- 字符串上的合并排序上的 Seg 错误
- 将图形表示为unordered_map<字符串、向量>时拓扑排序错误<string>
- 如何在数组 c++ 中对字符串进行排序
- 提高从排序字符串中获取字母顺序的顺序复杂性
- 尝试使用C++中的模板进行BST排序,但在使用随机字符串进行测试时不起作用
- 如何根据第二列/第三列等对字符串向量进行排序?
- 如何对向量进行排序<浮点数,字符串>而不考虑字符串
- C ++中的字符串排序,也没有在第5个元素正确排序
- C++:使用 LSD 基数排序字符串排序崩溃
- C 样式的字符串排序与排序和 qsort
- 自定义字符串排序
- 编号和字符串排序Al
- 使用STL对子字符串排序
- 如何在c++中按字母顺序对标准输入字符串排序
- c++向量字符串排序不工作
- SQLite 的不区分大小写的 UTF-8 字符串排序规则 (C/C++)