我知道问题不是太具体.
我想要的只是告诉我如何将普通合并排序转换为就地合并排序(或具有恒定额外空间开销的合并排序).
我所能找到的(网上)是"太复杂"或"超出本文范围"的网页.
唯一已知的就地合并方式(没有任何额外空间)太复杂,无法简化为实际程序.(取自这里)
即使它太复杂,如何使合并排序到位的基本概念是什么?
当特定排序算法优于其他排序算法时,有什么用例 - __CODE__vs __CODE__vs __CODE__vs __CODE__等?
是否有基于数据结构的大小,类型,可用内存和缓存以及CPU性能使用它们的建议指南?
quicksort和heapsort都进行就地排序.哪个更好?什么是首选的应用程序和案例?
堆排序具有最差的情况复杂性,O(nlogn)而Quicksort O(n^2).但是,经验证据表明,快速排序是优越的.这是为什么?
考虑使用PojoObject 的以下列表:
List<Pojo> list = new ArrayList<>();
....
class Pojo {
private int field1;
private int field2;
...
}
Run Code Online (Sandbox Code Playgroud)
注意: Pojo可以有两个以上的字段
我Pojo-s按升序排序我的列表:
Collections.sort(list, new Comparator<Pojo>() {
@Override
public int compare(Pojo o1, Pojo o2) {
int fieldCompareTo = compare(o1.field1, o2.field1);
if (fieldCompareTo == 0) {
fieldCompareTo = compare(o1.field2, o2.field2);
}
return fieldCompareTo;
}
});
private static int compare(int a, int b) {
return a < b ? -1
: a > b ? 1
: 0;
} …Run Code Online (Sandbox Code Playgroud)