链表适合归并排序而不是快速排序的原因主要有以下几点:
-
内存访问模式:快速排序的效率主要来源于引用的局部性,计算机硬件在这里得到了优化,因此访问彼此相邻的内存位置往往比访问分散在内存中的内存位置更快。然而,链表单元格经常分散在内存中,所以访问相邻的链表单元格没有局部性的好处。因此,快速排序的一个大的性能优势在链表排序中就被削弱了。
-
空间复杂度:快速排序是原地排序,不需要创建任何辅助数组来保存临时值。这在数组排序中是一个巨大的优势,因为分配和释放辅助数组所需的时间是显而易见的。然而,对于链表来说,归并排序的链表算法并不需要任何额外的辅助存储空间。
-
排序效率:归并排序往往更快,因为它更平均地将列表一分为二,并且在每次迭代中进行归并比执行分区步骤所做的工作更少