美文网首页技术干货C++
多线程快排算法实现C++11

多线程快排算法实现C++11

作者: mayushengmusic | 来源:发表于2017-05-25 17:23 被阅读0次

C++11引入了多线程库(前身Boost线程库),借助future 异步线程机制可以非常方面的实现一个多线程版本的快排序,std::async可以自动选择是创建线程时执行还是调用get的线程中执行(避免过度订阅)。
这里的实现方法,对传入的链表是毁灭性的,排序结束,旧的无序链表将为空。

#include <iostream>
#include <list>
#include <random>
#include <future>
#include <algorithm>


template <typename T>
std::list<T> fast_sort(std::list<T> &input)
{
    if(input.empty())
        return input;

    std::list<T> ret;

    const T pivot = *(input.begin());

    auto div = std::partition(input.begin(),input.end(),[&pivot](const T t){return t<pivot;});
    ret.push_back(*div);
    std::list<T> high;
    high.splice(high.begin(),input,input.begin(),div);
    input.pop_front();
    std::list<T> low(std::move(input));
    std::future<std::list<T>> run = std::async(fast_sort<T>,std::ref(high));
    auto ret_high=run.get();
    auto ret_low=fast_sort(low);
    ret.splice(ret.begin(),ret_high);
    ret.splice(ret.end(),ret_low);

    return ret;

}




int main(){


    std::list<int> test;
    std::random_device gen;
    for(int i=0;i<1000;i++)
        test.push_back(gen()%100);
    for(auto & x: test)
        std::cout<<x<<std::endl;
    std::cout<<"-----------"<<std::endl;
    auto test_x = fast_sort<int>(test);
    for(auto & x: test_x)
        std::cout<<x<<std::endl;

    return 0;

}

相关文章

  • 多线程快排算法实现C++11

    C++11引入了多线程库(前身Boost线程库),借助future 异步线程机制可以非常方面的实现一个多线程版本的...

  • 快排算法-OC实现

    引自百度百科 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分...

  • 算法

    【原创】以下是自己写的某些算法的JS实现 快排 (一) 快排(二) 希尔排序 插排 二分插排 归并排序

  • 排序

    八大排序算法 一、归并排序 递归及非递归的JAVA实现 二、快速排序 快排算法JAVA实现 三、堆排序 堆排序堆排...

  • 京东高级java现场三面,包含:算法、数据库、设计模式、java

    京东技术面试(一): 算法面试: 二叉树怎么实现的 知道哪些排序算法 快排怎么实现 堆排序怎么实现 一道算法题:两...

  • 快速排序的经典实现,你真的会写吗?

    快速排序,简称快排。快排是所有排序算法中应用最广泛的。接下来我们将会说说一个经典的快排是如何实现的。 思路 快排的...

  • 排序算法以及JavaScript实现

    最近遇到排序算法比较多,首先是快排,V8实现了一份快排,大部分的浏览器也是用快排的,快排是不稳定排序,而且最差的时...

  • 快排算法

    转:微信公众号:程序员小灰 快排算法 是按分治算法的思路进行排序的。 选定参照元素后,每次比较都按分治算法将小的移...

  • 快排算法

    本文摘自https://blog.csdn.net/yzllz001/article/details/509828...

  • 快排算法

    这里对快速排序做一下总结(之前在写时间复杂度和空间复杂度时候想到的。) 1. 思想 快排的思想就是说,选定数组中第...

网友评论

    本文标题:多线程快排算法实现C++11

    本文链接:https://www.haomeiwen.com/subject/xbezxxtx.html