简体   繁体   中英

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.

   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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM