1. 分离数据相关性:奇偶交换排序
选择排序.
冒泡排序的过程
奇偶交换排序的过程
奇偶交换排序说白了就是将整个比较交换分割为奇阶段和偶阶段,使得每一个阶段内的所有比较和交换都是没有数据相关性的.因此,每一次比较和交换都可以独立执行,也就可以并行化了.
1.1 奇偶交换排序的串行实现
1 | public static void oddEvenSort(int [] arr){ |
1.2 奇偶交换排序的并行实现
1 | import java.util.concurrent.CountDownLatch; |
2. 希尔排序
简单的插入排序很难并行化,因为这一次的数据插入依赖于上一次得到的有序序列,因此多个步骤之间无法并行.为此,我们可以对插入排序进行扩展,这就是希尔排序.
希尔排序将整个数组根据建个h分割为若干个子数组.子数组相互穿插在一起,在每一次排序时,分别对每一个子数组进行排序.当h为3时,希尔排序将整个数组分为交织在一起的三个子数组,其中,所有的方块为一个子数组,所有的圆形,三角形分别组成另外两个子数组,每次排序时,总算交换间隔为h的两个元素.
2.1 串行实现
1 | public class Solution { |
2.2 并行实现
1 | public class Solution { |
3. 参考文献
<< Java高并发程序设计 >>(葛一鸣 郭超)