根据上面给出的快速排序代码,这里是一个简单的归并排序实现:
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助手提供,问题来源于学员提问