Java 如何对二维数组进行排序?
我需要帮助排序二维数组。我有两行数组Java 如何对二维数组进行排序?,java,arrays,sorting,Java,Arrays,Sorting,我需要帮助排序二维数组。我有两行数组 [5, 3, 4, 1, 2] [10,20,30,40,50] 我需要把它分类成这样: [1, 2, 3, 4, 5] [40,50,20,30,10] 我知道如何使用气泡排序,但我需要一些更快的算法,例如快速排序 这是我的冒泡排序代码 for (int i = 0; i < length-1; i++) { for (int j = 0; j < length-i-1; j++) { i
[5, 3, 4, 1, 2]
[10,20,30,40,50]
我需要把它分类成这样:
[1, 2, 3, 4, 5]
[40,50,20,30,10]
我知道如何使用气泡排序,但我需要一些更快的算法,例如快速排序
这是我的冒泡排序代码
for (int i = 0; i < length-1; i++) {
for (int j = 0; j < length-i-1; j++) {
if (array[0][j] > array[0][j+1]) {
for (int k = 0; k < 2; k++) {
int tmp = array[k][j];
array[k][j] = array[k][j+1];
array[k][j+1]=tmp;
}
}
}
}
for(int i=0;i数组[0][j+1]){
对于(int k=0;k<2;k++){
int tmp=数组[k][j];
数组[k][j]=数组[k][j+1];
数组[k][j+1]=tmp;
}
}
}
}
您考虑过合并排序算法吗
在这种情况下,这应该是最快的。
(wiki中也提供了一个抽象实现)编辑(OP更改公式后):
您可以将所有这些数据收集到地图上,然后按键对其进行排序。收集到映射是O(n),您可以使用有序映射实现免费获得排序。转置在我看来更昂贵转置2D阵列
使用
array.sort(T[]a,Comparator您可以使用Comparator来实现这一点
Arrays.sort(a, new Comparator<Long[]>() {
@Override
public int compare(Long[] o1, Long[] o2) {
Long t1 = o1[1];
Long p1 = o1[0];
Long t2 = o2[1];
Long p2 = o2[0];
if (t1 == t2) {
return (p1 > p2 ? 1 : (p1 == p2 ? 0 : -1));
} else {
return (t1 < t2 ? -1 : 1);
}
}
});
Arrays.sort(一个新的比较器(){
@凌驾
公共整数比较(长[]o1,长[]o2){
长t1=o1[1];
长p1=o1[0];
长t2=o2[1];
长p2=o2[0];
如果(t1==t2){
返回(p1>p2?1:(p1==p2?0:-1));
}否则{
返回(t1
在compare
方法中进行比较登录,并返回相关值以对数组进行相应排序。如果需要快速排序,可以使用[1,2,3,4,5][40,50,20,30,10]
它是如何精确排序的?看起来你有某种地图或字典。你考虑过使用不同的数据结构吗?可能是重复的否,我需要按照第二行的相同顺序对第一行进行排序。第一行是索引,第二行是值。@JakubMartinek这就可以了。将2d数组转换为Map
。快速排序键集(或您想要使用的任何算法)。然后,如果出于某种原因,它确实必须是一个数组
,则通过迭代映射
的键集
,将其转换回数组。这是一个很好的解决方案,前提是键必须是唯一的,任何重复的键都将被删除discarded@StormeHawke,这是对我上一篇博文编辑的评论,其中由于问题陈述不正确,我给出了错误的答案:)@cdoh。我的错:)