我已经明白,当排序说一个LinkedList时,最好使用合并排序,因为当你想把一些东西放在列表的中间时,你可以在O(1)中做到(常数)时间和O(1)记忆。因此,可以在不占用额外空间的情况下完成合并排序。
我的问题是:应该在ArrayList上使用哪种排序算法?您要排序的数据类型是否重要?
如果我对LinkedList有误,请纠正我,或者让我知道我是否遗漏了某些内容(例如,使用合并的一些论点)。
答案 0 :(得分:0)
如果没有将列表复制到数组,排序数组,然后创建新列表,最快的列表排序是自下而上的合并排序:
https://en.wikipedia.org/wiki/Merge_sort#Bottom-up_implementation_using_lists
假设ArrayList是作为指向对象的指针数组实现的,并且排序ArrayList对指针进行排序而不是排序对象,那么合并排序比快速排序更快,因为合并排序会比快速排序更多但比较少排序,在这种情况下,只有指针被移动,而比较涉及通过指针的间接。
答案 1 :(得分:0)