相关文章推荐
冲动的消炎药  ·  javaforEach - CSDN文库·  4 月前    · 
谈吐大方的电池  ·  java.net.URISyntaxExce ...·  6 月前    · 
飞翔的开心果  ·  找不到资源- ...·  1 年前    · 

c++ 多线程排序

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 函数中测试了并行快速排序算法,输出排序后的结果。

需要注意的是,使用多线程并不总是会带来

  •