首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对二维java数组进行排序

对二维java数组进行排序
EN

Stack Overflow用户
提问于 2010-12-06 00:41:12
回答 2查看 3.4K关注 0票数 2

我已经实现了冒泡排序来对二维java进行长时间排序,但我的天哪,它太慢了,我将需要可能的快速算法,因为我将生成jvm允许的最大堆大小的数组。

因此,我认为最好、最快的方法是使用内置的java Arrays.sort。

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

这将允许我对整数的维数组进行排序,有谁知道如何将其更改为允许长整型?我曾考虑过这个问题,但还没有找到joy。

代码语言:javascript
复制
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];
    }
});

我想说的是

代码语言:javascript
复制
long d2L [][] = {{1,43},{26,98},{44,398},{11,34},{17,32}};

选角不是一个选择,因为数字很大

另外,如果有人认为有一种更快的方法来排序,那么请注意:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-06 00:56:26

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

代码语言:javascript
复制
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

或者,您可以使用泛型来避免强制转换:

代码语言:javascript
复制
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;
  }
}
票数 2
EN

Stack Overflow用户

发布于 2010-12-06 00:51:53

只需使用如下所示的比较方法:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4359869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档