How to Sort a 2D array?

后端 未结 4 535
面向向阳花
面向向阳花 2021-01-29 12:24

I need help with sorting 2D array. I\'ve got array with two rows

[5, 3, 4, 1, 2]
[10,20,30,40,50]

and I need to sort it to look like this:

相关标签:
4条回答
  • 2021-01-29 13:07

    Did you think about merge-sort-alorithm?

    http://en.wikipedia.org/wiki/Merge_sort that should be the fastest in that case. (an abstract implementation is available in wiki too)

    0 讨论(0)
  • 2021-01-29 13:16

    Edit (after OP changed formulations):

    You may collect that all to Map and then sort it by keys. Collecting to Map is O(n) and you can get sorting for free using ordered Map implementation. Transposing looks more expensive to me

    0 讨论(0)
  • 2021-01-29 13:21

    You can use Comparator to do that. This thread has some useful information for C++ . Sample code in Java is like,

    Arrays.sort(a, new Comparator<Long[]>() {
    
            @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);
                }
    
            }
        });
    

    Do your comparison login in compare method and return the relevant values to sort the array accordingly.

    0 讨论(0)
  • 2021-01-29 13:23

    transpose the 2D array java multi-dimensional array transposing

    use Arrays.sort(T[] a, Comparator<? super T> c) where the comparator compares on index 0 of each row

    transpose the result again:

    e.g.

    from: [5,3,4,1,2] [10,20,30,40,50]

    obtain [5, 10] [3, 20] [4, 30] [1, 40] [2, 50]

    then sort them to [1, 40] [2, 50] [3, 20] [4, 30] [5, 10]

    then transpose again to: [1,2,3,4,5] [40,50,20,30,10]

    or implement quicksort by yourself.

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