QT开发中文网

class QuickSort : public QThread { Q_OBJECT public: explicit QuickSort(QObject *parent = nullptr); void recvArray(QVector lists); protected: void run(); signals: void finish(QVector lists); private: QVector

根据上面给出的快速排序代码,这里是一个简单的归并排序实现:

class MergeSort : public QThread
{
    Q_OBJECT
public:
    explicit MergeSort(QObject *parent = nullptr);
    void recvArray(QVector<int> lists);

protected:
    void run();

signals:
    void finish(QVector<int> lists);

private:
    QVector<int> lists;

    void mergeSort(QVector<int>& arr, int l, int r);
    void merge(QVector<int>& arr, int l, int m, int r);
};

MergeSort::MergeSort(QObject* parent) : QThread(parent)
{

}

void MergeSort::recvArray(QVector<int> lists)
{
    this->lists = lists;
}

void MergeSort::run()
{
    qDebug() << "归并排序的线程地址:" << QThread::currentThread();

    QElapsedTimer* time = new QElapsedTimer;
    time->start();

    mergeSort(lists, 0, lists.size() - 1);

    int milsec = time->elapsed();
    qDebug() << "归并排序" << lists.size() << "个数,用时为:" << milsec << "毫秒";

    delete time;

    emit finish(lists);
}

void MergeSort::mergeSort(QVector<int>& arr, int l, int r)
{
    if (l < r)
    {
        int m = (l + r) / 2;
        mergeSort(arr, l, m);
        mergeSort(arr, m + 1, r);
        merge(arr, l, m ,r);
    }
}

void MergeSort::merge(QVector<int>& arr, int l ,int m ,int r)
{
   QVector<int> left(arr.begin() + l, arr.begin() + m + 1);
   QVector<int> right(arr.begin() + m + 1, arr.begin() + r + 1);

   int i = 0;
   int j = 0;
   int k = l;

   while (i < left.size() && j < right.size())
   {
       if (left[i] <= right[j])
           arr[k++] = left[i++];
       else
           arr[k++] = right[j++];
   }

   while (i < left.size())
       arr[k++] = left[i++];

   while (j < right.size())
       arr[k++] = right[j++];
}

请注意,这只是一个简单的归并排序示例代码,可能还需要根据实际需求进行优化或适配。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=10061

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?