当前位置:网站首页>并行化快速排序设想
并行化快速排序设想
2022-07-30 12:13:00 【君梦如烟Brian】
并行化快速排序
对于一般的快速排序,总是使用分治法将任务划分成两个子任务。那么,子任务之间是相互对立的。不仅如此,它不像归并排序的分治之后还需要汇总的过程。
因此,可以相当然,将一趟快排与任务联系起来。
规定:QuickSort(arr, l, r) 为一趟快排。
由于任务之间两两独立,每趟快排完成之后(即确认了一个数的下标后),我们可以将子任务并行执行,化为两个段范围的子任务,对于个数比较少的任务,我们可以使用插入算法直接处理。
因为是计算密集型的程序,为了最大化性能,我们直接设计线程池重用线程。
void QuickSort(arr, beg, end){
if(end - beg <= 5) {
inserted_sort(arr, beg, end);
return;
}
mid = beg + (end - beg)/2;
pool.addTask(QuickSort(arr, beg, mid));
pool.addTask(QuickSort(arr, mid, end));
}
其实,跟递归版本的快排没什么区别
关于同步方面,只要使用一个定制版本的CountDownLatch,主线程wait, 每投递一个任务就计数自增,在函数结束的时刻再down,防止过早的down导致提前唤醒主线程。
void QuickSort(arr, beg, end){
if(end - beg <= 5) {
inserted_sort(arr, beg, end);
return;
}
mid = beg + (end - beg)/2;
pool.addTask(QuickSort(arr, beg, mid));
pool.addTask(QuickSort(arr, mid, end));
latch.inc(2); // count = count + 2;
latch.down(); // count = count - 1;
}
主线程的部分
threadpool pool;
CountDownLatch latch;
latch.inc(1);
pool.addTask(QuickSort(arr, beg, end))
latch.wait();
关于并行化归并排序
对于归并排序的并行化,与快排也差不多。只不过需要在结束两个子任务时候,进行同步。性能方面,应该没有快速排序的快。因为,任务线程之间同步,导致我们不能很好地重用线程。当然,我们可以用类似于协程的手段去解决这种阻塞问题。
边栏推荐
- js 构造函数 return 非空对象,其实例化的对象在原型上的差异
- 数字量输入输出模块DAM-5088
- int a=8,a=a++,a? int b=8,b=b+1,b?
- Matlab基础(4)——矩阵
- Scheduling of combined electric-heating system based on multi-objective two-stage stochastic programming method
- Farmers on the assembly line: I grow vegetables in a factory
- 【Kaggle:UW-Madison GI Tract Image Segmentation】肠胃分割比赛:赛后复盘+数据再理解
- 物理服务器与虚拟机:主要区别和相似之处
- int a=8,a=a++,a? int b=8,b=b+1,b?
- 句柄与指针的简单理解
猜你喜欢

LinkedList与链表

双击Idea图标打不开——解决办法

打破原则引入SQL,MongoDB到底想要干啥???

SCM engineers written questions induction summary

使用百度EasyDL实现明厨亮灶厨师帽识别

物理服务器与虚拟机:主要区别和相似之处

Matlab绘图(1)——二维绘图

超图iServer rest服务之最佳路径分析

Horizontal comparison of 5 commonly used registration centers, whether it is used for interviews or technical selection, is very helpful

JD.com was brutally killed by middleware on two sides. After 30 days of learning this middleware booklet, it advanced to Ali.
随机推荐
Horizontal comparison of 5 commonly used registration centers, whether it is used for interviews or technical selection, is very helpful
【CVA估值训练营】如何快速读懂上市公司年报——第五讲
限时招募!淘宝无货源副业,800/天,不限经验,男女皆可,仅限前200名!
Beijing, Shanghai and Guangzhou offline events丨The most unmissable technology gatherings at the end of the year are all gathered
为什么说Prometheus是足以取代Zabbix的监控神器?
Matlab基础(3)——元胞与结构体
微信视频号视频如何下载提取?视频号直播回放如何下载?方法很简单!
【语音识别】基于GMM-HMM的语音识别系统
nodeJs--fs模块
结合实战,浅析GB/T28181(三)——实况点播
Apifox 生成接口文档 教程与操作步骤
mapbox-gl开发教程(十四):画圆技巧
Homework 7.29 correlation function directory and file attributes related functions
saltstack学习3模块
Program environment and preprocessing (detailed)
历时两月,终拿字节跳动offer,算法面试题分享「带答案」
多表联查的学习
【Kaggle比赛常用trick】K折交叉验证、TTA
Win11打不开exe应用程序怎么办?Win11无法打开exe程序解决方法
Apifox generates interface documentation tutorial and operation steps