如何排序2D数组?

我需要帮助排序2D数组。 我有两行数组

[5, 3, 4, 1, 2] [10,20,30,40,50] 

我需要将它排序为这样:

 [1, 2, 3, 4, 5] [40,50,20,30,10] 

我知道如何使用冒泡排序,但我需要一些更快的算法,例如quicksort。

这是我的冒泡排序代码

  for (int i = 0; i < length-1; i++) { for (int j = 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; } } } } 

转置2D数组java多维数组转置

使用Arrays.sort(T[] a, Comparator c) ,比较器在每行的索引0上进行比较

再次转置结果:

例如

来自: [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]

或者自己实施快速排序。

编辑(OP改变后的配方):

您可以将所有内容收集到Map中,然后按键对其进行排序。 收集到地图是O(n),您可以使用有序的地图实施免费进行排序。 转置对我来说看起来更贵

您是否考虑过合并排序算法?

http://en.wikipedia.org/wiki/Merge_sort在这种情况下应该是最快的。 (wiki中也提供了一个抽象实现)

您可以使用Comparator来执行此操作。 该线程有一些C ++的有用信息 。 Java中的示例代码就像,

 Arrays.sort(a, new Comparator() { @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方法中compare比较登录并返回相关值以相应地对数组进行排序。