我需要帮助排序2D数组。我有两行数组
[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;
}
}
}
}
答案 0 :(得分:4)
转置2D数组java multi-dimensional array transposing
使用Arrays.sort(T[] a, Comparator<? super T> c)
,比较器在每行的索引0上进行比较
再次转置结果:
e.g。
来自:[5,3,4,1,2] [10,20,30,40,50]
获取[5, 10] [3, 20] [4, 30] [1, 40] [2, 50]
然后将它们排序为[1, 40] [2, 50] [3, 20] [4, 30] [5, 10]
然后转置到:[1,2,3,4,5] [40,50,20,30,10]
或自己实施快速排序。
答案 1 :(得分:1)
编辑(OP改变配方后):
您可以将所有内容收集到Map中,然后按键对其进行排序。收集到地图是O(n),您可以使用有序的地图实施免费进行排序。转置对我来说看起来更贵
答案 2 :(得分:0)
您是否考虑过合并排序算法?
http://en.wikipedia.org/wiki/Merge_sort 在那种情况下应该是最快的。 (wiki也提供了抽象实现)
答案 3 :(得分:0)
您可以使用比较器来执行此操作。 This thread has some useful information for C++ 。 Java中的示例代码就像,
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);
}
}
});
在compare
方法中进行比较登录并返回相关值以相应地对数组进行排序。