C++ 中可以使用多线程来加速排序的过程。下面是一个基于 Quick Sort 算法的多线程排序的示例代码:
#include <iostream>
#include <vector>
#include <thread>
#include <algorithm>
using namespace std;
const int THREADS = 4; // 线程数
// 交换两个数
template<typename T>
void swap(T& a, T& b) {
T temp = a;
a = b;
b = temp;
// 分区函数
template<typename T>
int partition(vector<T>& v, int left, int right) {
T pivot = v[right];
int i = left - 1;
for (int j = left; j < right; j++) {
if (v[j] < pivot) {
swap(v[i], v[j]);
swap(v[i+1], v[right]);
return i+1;
// 快速排序的串行实现
template<typename T>
void quickSort(vector<T>& v, int left, int right) {
if (left < right) {
int p = partition(v, left, right);
quickSort(v, left, p-1);
quickSort(v, p+1, right);
// 快速排序的并行实现
template<typename T>
void parallelQuickSort(vector<T>& v, int left, int right, int threads) {
if (left < right) {
if (threads <= 1) {
quickSort(v, left, right);
} else {
int p = partition(v, left, right);
// 创建两个子线程,分别对左右两个分区进行排序
thread t1(parallelQuickSort<T>, ref(v), left, p-1, threads/2);
thread t2(parallelQuickSort<T>, ref(v), p+1, right, threads/2);
// 等待两个子线程完成
t1.join();
t2.join();
int main() {
vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
parallelQuickSort(v, 0, v.size()-1, THREADS);
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
cout << endl;
return 0;
在这个示例代码中,我们首先定义了一个常量 THREADS,它表示要使用的线程数。接着,我们实现了一个交换两个数的函数 swap 和一个分区函数 partition,它们都是快速排序算法中的基本操作。然后,我们实现了快速排序的串行实现 quickSort 和并行实现 parallelQuickSort。parallelQuickSort 函数使用递归的方式实现了并行排序。如果当前线程数小于等于 1,就使用串行快速排序算法;否则,创建两个子线程分别对左右两个分区进行排序,并等待子线程完成。最后,我们在 main 函数中测试了并行快速排序算法,输出排序后的结果。
需要注意的是,使用多线程并不总是会带来