sorting 2 dimensional java array

后端 未结 2 1760
感情败类
感情败类 2020-12-21 16:35

I have implemented bubble sort to sort a two dimensional java long [][] but my god is it slow, I will be needing the fasted algorithm possible as i will be generating a arra

相关标签:
2条回答
  • 2020-12-21 16:43

    This sorts based on all columns in O(NlogN), i.e. really fast:

    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

    Or you could use generics to avoid casting:

    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;
      }
    }
    
    0 讨论(0)
  • 2020-12-21 17:06

    Just use a compare method like this:

    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;
        }
    }
    

    I'd start out with the built-in Arrays.sort. That will run much, much faster than bubble sort. If it's still not fast enough, look at the algorithms here: http://en.wikipedia.org/wiki/Sorting_algorithms

    0 讨论(0)
提交回复
热议问题