如何排序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 super T> 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
比较登录并返回相关值以相应地对数组进行排序。