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:
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)
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
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.
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.