整数阵列合并排序比QuickSort快
Integer array where merge sort is faster than quicksort
我正在比较合并排序和快速排序与整数数组,以查看哪个在对数组进行排序时更快,我已经设置了一个数组但是我不知道如何将合并排序比快速排序更快。有人可以给我一个这样做的例子吗?阵列不一定要大,它的尺寸可能很小,例如20。
已经通过数学分析了这两种,结果表明,合并排序在大多数情况下可能会更快。
O(n lg n)
QuickSort分析显示了一个范围,最好的情况方案等于合并排序时间:
O(n lg n) (best)
O(n²) (worst)
我认为Wikipedia分析很好地解释了为什么一个人最终比另一个要快。正如肯尼·奥斯特罗姆(Kenny Ostrom)评论了您的问题一样,您应该做的是计算比较数量,如果您实施使用算法,并且通过优化,您从来都不知道会发生多少比较和分支,一旦您就会发生多少个比较和分支机构。运行代码(即,新处理器具有有条件的MOV指令,这意味着您可以完全避免分支!)
但是,如果您正在寻找纯粹的分析,那么速度本身不是问题(即,您不需要时间计时),而是计算您进行比较的次数和数字您交换两个条目。这为您提供了特定对象数组的时机,无论对象是什么(尽管比较函数可能真的很昂贵:想象一下比较两个需要进行一些OCR工作的图像才能进行排序...)
)为什么在进行分析时速度不是问题?
如果您在Wikipedia上阅读了合并排序算法,您会注意到他们提到的事实是,要达到正确实现算法所需的最佳情况。因此,如果您自己编写或使用未实现的版本,那么您可能会发现合并排序比QuickSort慢。
相关文章:
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 下面是排序算法O(n)吗
- C++使用QuickSort对数组结构进行排序
- QuickSort无法始终如一地对100 000个整数的数据集进行排序
- 整数阵列合并排序比QuickSort快
- 使用QuickSort算法以降序排序向量
- C++Qt使用Quicksort按字母顺序对字符串进行排序
- 使用Quicksort C++对数组进行排序
- 两种排序算法在同一个数组上给出了两种不同的输出(quickSort和heapSort)