草庐IT

mergesort

全部标签

java - 为什么递归 MergeSort 比迭代 MergeSort 更快?

我刚刚实现了这两种算法,当我绘制结果时我很惊讶!递归实现显然比迭代实现更快。之后,我将插入排序与两者相结合,结果是一样的。在讲座中,我们经常看到递归比阶乘计算中的迭代慢,但在这里似乎并非如此。我很确定我的代码是正确的。这种行为的解释是什么?它看起来像java(10)在递归模式下自动实现多线程,因为当我显示小动画时,插入排序与合并操作并行工作。如果这些代码还不足以理解这里是我的github:Github编辑重新加载正如评论中所说,我应该比较相似的东西,所以现在合并方法在迭代和递归中是相同的。privatevoidmerge(ArrayToSortarray,T[]sub_array,in

java - 适合内存的顺序数据的 QuickSort 和 MergeSort 性能与磁盘上访问顺序数据的速度比较慢

以下引自《与其他排序算法的比较》来自WikipediaMergeSort的部分页Ontypicalmodernarchitectures,efficientquicksortimplementationsgenerallyoutperformmergesortforsortingRAM-basedarrays.[citationneeded]Ontheotherhand,mergesortisastablesortandismoreefficientathandlingslow-to-accesssequentialmedia.我的问题:当要排序的数据都可以放入内存时,为什么Quick

sorting - Mergesort 没有正确计算 1 的左右尺寸

我不确定为什么合并操作的左尺寸和右尺寸似乎不适用于左=0、中=0和右=1。由于这些计算,左右数组的slice没有任何意义。合并排序算法假定这些数组之一必须具有值才能使其位于代码的合并部分。这会导致索引错误:(https://play.golang.org/p/Fmj4xNQTL8Wpackagemainimport("fmt")funcmerge(arr[]int,l,mid,rint){leftSize:=mid-l+1rightSize:=r-midleft:=arr[l:mid]right:=arr[mid+1:r]fmt.Printf("l:%v,m:%v,r:%v\n",l,

c++ - 在合并排序 C++ 中使用合并时的随机值

对于一个小的家庭作业,我应该编写一个简单的合并函数,其原型(prototype)如下所示:voidmerge(inta[],intleft_low,intleft_high,intright_low,intright_high)说明为了简单起见,我们只接受一个数组,a[]和right_low=left_high+1。我们还将最终值存储在传入的原始数组a[]中。本质上,对于值a[]={1,3,10,4,7的数组,8}看起来像这样:a={1,3,10,4,7,8}^^^^left_lowleft_highright_lowright_high对于这项作业,我们必须通过一些测试。第一个是两个

c++ - 在合并排序 C++ 中使用合并时的随机值

对于一个小的家庭作业,我应该编写一个简单的合并函数,其原型(prototype)如下所示:voidmerge(inta[],intleft_low,intleft_high,intright_low,intright_high)说明为了简单起见,我们只接受一个数组,a[]和right_low=left_high+1。我们还将最终值存储在传入的原始数组a[]中。本质上,对于值a[]={1,3,10,4,7的数组,8}看起来像这样:a={1,3,10,4,7,8}^^^^left_lowleft_highright_lowright_high对于这项作业,我们必须通过一些测试。第一个是两个

java - 为什么 Collections.sort 使用 Mergesort 而 Arrays.sort 不使用?

我正在使用JDK-8(x64)。对于Arrays.sort(原语),我在Java文档中找到了以下内容:ThesortingalgorithmisaDual-PivotQuicksortbyVladimirYaroslavskiy,JonBentley,andJoshuaBloch.`对于Collections.sort(对象)我发现了这个“Timsort”:Thisimplementationisastable,adaptive,iterativemergesort...Thisimplementationdumpsthespecifiedlistintoanarray,sortsth

java - 为什么 Collections.sort 使用 Mergesort 而 Arrays.sort 不使用?

我正在使用JDK-8(x64)。对于Arrays.sort(原语),我在Java文档中找到了以下内容:ThesortingalgorithmisaDual-PivotQuicksortbyVladimirYaroslavskiy,JonBentley,andJoshuaBloch.`对于Collections.sort(对象)我发现了这个“Timsort”:Thisimplementationisastable,adaptive,iterativemergesort...Thisimplementationdumpsthespecifiedlistintoanarray,sortsth

java - 为什么 Java 的 Arrays.sort 方法对不同的类型使用两种不同的排序算法?

Java6的Arrays.sort方法对基元数组使用快速排序,对对象数组使用合并排序。我相信大多数时候快速排序比合并排序更快,并且消耗更少的内存。我的实验支持这一点,尽管两种算法都是O(nlog(n))。那么为什么不同的类型使用不同的算法呢? 最佳答案 最可能的原因:快速排序不是稳定,即相等的条目可以在排序过程中改变它们的相对位置;除此之外,这意味着如果您对已排序的数组进行排序,它可能不会保持不变。由于原始类型没有标识(无法区分具有相同值的两个整数),因此这对它们来说无关紧要。但是对于引用类型,它可能会导致某些应用程序出现问题。因此

java - 为什么 Java 的 Arrays.sort 方法对不同的类型使用两种不同的排序算法?

Java6的Arrays.sort方法对基元数组使用快速排序,对对象数组使用合并排序。我相信大多数时候快速排序比合并排序更快,并且消耗更少的内存。我的实验支持这一点,尽管两种算法都是O(nlog(n))。那么为什么不同的类型使用不同的算法呢? 最佳答案 最可能的原因:快速排序不是稳定,即相等的条目可以在排序过程中改变它们的相对位置;除此之外,这意味着如果您对已排序的数组进行排序,它可能不会保持不变。由于原始类型没有标识(无法区分具有相同值的两个整数),因此这对它们来说无关紧要。但是对于引用类型,它可能会导致某些应用程序出现问题。因此