排序2维java数组

时间:2010-12-05 16:41:12

标签: java sorting

我已经实现了冒泡排序来对二维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<int[]>() {
    public int compare(int[] a, int[] b) {
        return b[0] - a[0];
    }
});

我想排序说

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

施放不是一个选项,因为数字是一个巨大的

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

2 个答案:

答案 0 :(得分:2)

这基于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

或者您可以使用泛型来避免投射:

class Compare2DArray implements Comparator<int[]> {
  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;
  }
}

答案 1 :(得分:1)

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

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