排序2维java数组

我已经实现了冒泡排序来对二维java long [] []进行排序但是我的上帝很慢,我将需要禁食算法,因为我将生成一个最大堆大小的数组jvm将允许我,

所以我认为最好和最快的方法是使用inbuild java Arrays.sort

我不介意它是否只能排在第一列,因为我可以改变我的程序以适应,我遇到了这个,但我不熟悉comaparator,

这将允许我对一个整数的维数排序,有没有人知道如何改变它以允许多头?,我做了思想家周围没有喜悦。

int d2 [][] = {{1,43},{26,98},{44,398},{11,34},{17,32}}; java.util.Arrays.sort(d2, new java.util.Comparator() { public int compare(int[] a, int[] b) { return b[0] - a[0]; } }); 

我想排序说

 long d2L [][] = {{1,43},{26,98},{44,398},{11,34},{17,32}}; 

铸造不是一个选项,因为数字庞大

此外,如果有人认为这是一个更快的方法来排序我所有的耳朵:)

这基于O(NlogN)中的所有列进行排序,即非常快:

 import java.util.*; class Compare2DArray implements Comparator { public int compare(Object a, Object b) { int aa[] = (int[]) a; int bb[] = (int[]) b; for (int i = 0; i < aa.length && i < bb.length; i++) if (aa[i] != bb[i]) return aa[i] - bb[i]; return aa.length - bb.length; } } class sort2d { public static void main(String args[]) { int d2 [][] = {{1,43},{26,98},{44,398},{11,34},{17,32}}; Arrays.sort(d2, new Compare2DArray()); for (int i = 0; i < d2.length; i++) { for (int j = 0; j < d2[i].length; j++) System.out.print(d2[i][j] + " "); System.out.println(); } } } 

http://ideone.com/TjEOL

或者您可以使用generics来避免强制转换:

 class Compare2DArray implements Comparator { public int compare(int a[], int b[]) { for (int i = 0; i < a.length && i < b.length; i++) if (a[i] != b[i]) return a[i] - b[i]; return a.length - b.length; } } 

只需使用这样的比较方法:

 public int compare(long[] a, long[] b) { if(a[0] < b[0]) { return -1; } else if(a[0] > b[0]) { return 1; } else { return 0; } } 

我从内置的Arrays.sort开始。 这将比冒泡排序快得多。 如果它仍然不够快,请查看这里的算法: http : //en.wikipedia.org/wiki/Sorting_algorithms