算法-快速排序和合并排序是否可以利用多核进一步加速

问题描述

快速排序和合并排序是否可以利用多核进一步加速

我在研究快速排序和合并排序的时候突然想到这两个算法是否可以利用多核来进一步加快运行效率~
因为它们是采用了分治法的思想,分解成多个互相独立的子排序,与其他需要顺序执行的排序算法不同~
没经过系统学习~正在看算法导论~勿喷~

解决方案

合并排序比较适合多核加速,jdk8的新Arrays.parallelSort API就是这么实现的,quick sort从理论上来说也可以利用多核加速,不过由于其对于不同数据的split有可能出现线性的特点,理论上不是能保证得到加速。
另外,对于多核加速,期望值不要太高,基于我们对Arrays.parallelSort的测试,4核cpu最多能达到3.2倍的速度,而16核只能达到11.8倍。主要是由于现阶段的split之后还有merge。

解决方案二:

理论上是这样,但是要考虑到数据同步和数据传输传输的开销,这个应该看《并行计算导论》。

解决方案三:

可以~希尔排序也可以多核加速

时间: 2024-10-30 20:14:00

算法-快速排序和合并排序是否可以利用多核进一步加速的相关文章

一步一步写算法(之合并排序)

原文:一步一步写算法(之合并排序) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com]     前面一篇博客提到的快速排序是排序算法中的一种经典算法.和快速排序一样,合并排序是另外一种经常使用的排序算法.那么合并排序算法有什么不同呢?关键之处就体现在这个合并上面.     合并算法的基本步骤如下所示:     1)把0~length-1的数组分成左数组和右数组     2)对左数组和右数组进行迭代排序     3)将左数组和右数组进行合并,那

排序算法系列之合并排序

       归并排序(Merge sort,合并排序)是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 一 归并操作 基本思想     归并操作(merge),指的是将两个已经排序的序列合并成一个序列的操作,归并排序算法依赖归并操作. 归并操作的过程如下: 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 设定两个指针,最初位置分别为两个已经排序序列的起始位置 比较两个指针所指向的元素,选择相对小的元素

【算法导论】合并排序法

       分治法:将原问题划分为n个规模较小而结构与原问题相似的子问题:递归地解决这些子问题,然后再合并其结果,就得到了原问题的解.分治法在每一个递归上都有三个步骤:分解.解决.合并.而在本文中的合并排序法正是运用了这种分而治之的策略:把一个n个元素的数组先分成两个数组,然后继续分下去,知道分成n个数组:然后将其逐一合并排序,最终得到排列好了的数组.下面我们首先看一看合并排序了原理框图:(图中黑色部分看不见不要紧,只需了解是将数组L.R中浅颜色的元素从小到大依次填入数组A中) 上述原理的具体

浅谈算法和数据结构 三 合并排序

合并排序,顾名思义,就是通过将两个有序的序列合并为一个大的有序的序列的方式来实现排序.合并排序是一种典型的分治算法:首先将序列分为两部分,然后对每一部分进行循环递归的排序,然后逐个将结果进行合并. 合并排序最大的优点是它的时间复杂度为O(nlgn),这个是我们之前的选择排序和插入排序所达不到的.他还是一种稳定性排序,也就是相等的元素在序列中的相对位置在排序前后不会发生变化.他的唯一缺点是,需要利用额外的N的空间来进行排序. 一 原理 合并排序依赖于合并操作,即将两个已经排序的序列合并成一个序列,

Ruby实现的合并排序算法_ruby专题

算法课的作业,利用分治法,合并排序. #encoding: utf-8 #author: xu jin, 4100213 #date: Oct 27, 2012 #MergeSort #to sort an array by using MergeSort algorithm #example output: #The original array is:[4, 32, 84, 58, 49, 40, 75, 29, 82, 21, 70, 37, 70] #The sorted array i

一步一步写算法(之链表排序)

原文:一步一步写算法(之链表排序) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com]     相比较线性表的排序而言,链表排序的内容稍微麻烦一点.一方面,你要考虑数据插入的步骤:另外一方面你也要对指针有所顾虑.要是有一步的内容错了,那么操作系统会马上给你弹出一个exception.就链表的特殊性而言,适合于链表的排序有哪些呢?     (1)插入排序    (适合)     (2)冒泡排序    (适合)     (3)希尔排序    (适

Ruby实现的合并排序算法

  这篇文章主要介绍了Ruby实现的合并排序算法,本文直接给出实现代码,需要的朋友可以参考下 算法课的作业,利用分治法,合并排序. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #encoding: utf-8 #author: xu jin, 4100213 #date: Oct 27, 2012 #MergeSort #to sort a

源代码-如何c++编程产生白盒测试数据,遍历插入排序,快速排序合并排序的每条分支语句,并输出便历结果

问题描述 如何c++编程产生白盒测试数据,遍历插入排序,快速排序合并排序的每条分支语句,并输出便历结果 如题,想知道会用到什么库函数,该怎么编写语句,用什么算法,如果可以提供一段简单的源代码供参考 解决方案 白盒测试就是阅读代码,编写测试用例,覆盖所有分支,和编写代码无关.

Java排序算法 快速排序

排序是计算机内经常进行的一种操作,其目的是将一组"无序"的记录序列调整为"有序"的记录序列.下面让我们一起来看快速排序. AD: 快速排序(Quicksort)是对冒泡排序的一种改进.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列.快速排序不稳定,O(log(n))的额外空间,时间复杂度为O(nlog