Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays &引用;快速排序在小型数据数组上效果很好,但合并排序在大型数组上效果更好;_Arrays_Sorting_Quicksort_Mergesort - Fatal编程技术网

Arrays &引用;快速排序在小型数据数组上效果很好,但合并排序在大型数组上效果更好;

Arrays &引用;快速排序在小型数据数组上效果很好,但合并排序在大型数组上效果更好;,arrays,sorting,quicksort,mergesort,Arrays,Sorting,Quicksort,Mergesort,在将快速排序与其他排序进行比较时,我听到了一些类似于“快速排序适用于少量数据”的说法 这一评论的一个例子如下: 合并排序可以很好地处理任何类型的数据集,而不管其大小(大或小)。然而,快速排序不能很好地处理大型数据集 具体来说,我正在研究mergesort vs quicksort,并多次听到“quicksort更适合于少量数据,mergesort更适合于大量数据” 我知道快速排序比合并排序有它的优点,对于更大的数据量(引用的局部性,不需要额外的空间,等等) 然而,我很难理解为什么对于较小的数据

在将快速排序与其他排序进行比较时,我听到了一些类似于“快速排序适用于少量数据”的说法

这一评论的一个例子如下:

合并排序可以很好地处理任何类型的数据集,而不管其大小(大或小)。然而,快速排序不能很好地处理大型数据集

具体来说,我正在研究mergesort vs quicksort,并多次听到“quicksort更适合于少量数据,mergesort更适合于大量数据”

我知道快速排序比合并排序有它的优点,对于更大的数据量(引用的局部性,不需要额外的空间,等等)

然而,我很难理解为什么对于较小的数据量,快速排序比合并排序更好

我的工作:

Merge comparisons: 34
Quicksort comparisons: 17
Merge sort comparisons: 672
Quicksort comparisons: 1448
从我的一个快速程序(远远没有优化运行每种类型的基本版本)来看,这似乎是正确的:

对于大小为10的数组:

Merge comparisons: 34
Quicksort comparisons: 17
Merge sort comparisons: 672
Quicksort comparisons: 1448
对于大小为100的数组:

Merge comparisons: 34
Quicksort comparisons: 17
Merge sort comparisons: 672
Quicksort comparisons: 1448
至少就比较的次数而言,这是正确的


然而,就我的一生而言,我想不出为什么快速排序在较小的数据集中会表现出色,但在较大的数据集中却会被mergesort击败

快速排序很少或没有代码来避免最坏情况的行为通常比随机数的合并排序快(尽管在这种情况下,基数排序会更快)。在具有16个寄存器的处理器上,例如64位模式的PC,对于任何数据,4路合并排序(使用嵌套if-else而不是堆)的速度大约与快速排序相同或更快

你需要考虑的不仅仅是比较。一般来说,合并排序比快速排序执行更多的移动,但比快速排序执行更少的比较。这有助于加快合并排序的一个示例是对指向字符串的指针数组进行排序,其中移动指针的时间比比较字符串快得多

快速排序和合并排序运行时间都可以通过对小的子数组(从32个元素到128个元素)使用插入排序来改进