C++Qt使用Quicksort按字母顺序对字符串进行排序

C++ Qt Using Quicksort to sort strings alphabetical

本文关键字:字符串 排序 顺序 使用 Quicksort C++Qt      更新时间:2023-10-16

我想在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。