我必须在Java中编写合并排序函数。没问题。嗯,有点,但我完成了它。然后是我没有得到的后续问题。
问题:给定数组A[][]
,A[i][0]
为float
而A[i][1]
为非负int
,给出值{{1}的多重性(这里想到一个通过组合重复条目并记录合并的数量而折叠的大向量),编写一个合并排序版本,返回A[i][0]
所有B[][]
B[i][0] < B[i+1][0]
}。
有什么想法吗?我能做的最好的事情就是合并排序,然后对相同的排序进行分组,但显然你可以一步完成。
答案 0 :(得分:2)
Strage问题......在这些数组中使用不同的类型只是丑陋的(个人观点)。
然而,最有用的事情是用Comparator
重写合并函数。
这样您就可以使用您想要的任何属性进行排序。
最终会得到像void merge(A[] arr, Comparator<? super A> comp)
这样的签名。
顺便说一下,sort的Java实现很像这样。
要解决您的问题,请致电:
A[][] a = ...;
merge(a, new Comparator<A[]>() {
int compare(A[] a, A[] b) {
return ((Float)a[0]) - ((Float)b[0]);
}
});