似乎在很多教科书中,Merge Sort是使用数组完成的,因为它具有随机访问的优势。
我想知道是否有办法与其他数据结构进行合并排序?假设数据存储在队列或堆栈中,是否可以在队列/堆栈上对最多另一个辅助队列/堆栈进行合并排序?
我主要担心的是,由于没有随机访问,在这种情况下合并排序仍然能够达到O(n logn)效率吗?
答案 0 :(得分:0)
使用具有合并排序的数组的另一个好处是,如果您编写聪明(但难以理解)的算法,您可以在递归调用级别之间切换“scratch”数组和“real”数组。在合并排序的任何实现中,它的salt只会分配一次“scratch”数组,但是使用切换技术,你只需要最多移动一次结果。
使用堆栈和队列,您可能会使用数组作为底层数据结构。您可以使用关联列表,但push()
和pop()
或enqueue()
和dequeue()
中的常量因子会变大,因为您还必须为您分配内存项目。很明显,正如 @LearnedfromMistake 所示,使用堆栈和队列是可能的,但鉴于数组很可能被用作底层数据结构,目前尚不清楚这种方法的优点是什么