-2

我需要对二维数组进行排序的帮助。我有两行数组

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

我需要对其进行排序,使其看起来像这样:

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

我知道如何使用冒泡排序来做到这一点,但我需要一些更快的算法,例如快速排序。

这是我的冒泡排序代码

   for (int i = 0; i < length-1; i++) {
         for (int j = 0; j < length-i-1; j++) { 

            if (array[0][j] > array[0][j+1]) {

               for (int k = 0; k < 2; k++) {
               int tmp = array[k][j];
               array[k][j] = array[k][j+1];
               array[k][j+1]=tmp;
               }
           }
       }
    }
4

4 回答 4

4

转置二维数组java 多维数组转置

使用Arrays.sort(T[] a, Comparator<? super T> c)比较器在每行的索引 0 上进行比较的位置

再次转置结果:

例如

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

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

然后将它们排序到[1, 40] [2, 50] [3, 20] [4, 30] [5, 10]

然后再次转置为:[1,2,3,4,5] [40,50,20,30,10]

或者自己实现快速排序。

于 2013-09-09T19:12:25.250 回答
1

编辑(在 OP 更改配方后):

您可以将所有内容收集到 Map 中,然后按键对其进行排序。收集到 Map 是 O(n),您可以使用有序 Map 实现免费排序。转置对我来说看起来更贵

于 2013-09-09T19:11:19.940 回答
0

您是否考虑过合并排序算法?

http://en.wikipedia.org/wiki/Merge_sort 在这种情况下应该是最快的。(wiki 中也提供了一个抽象实现)

于 2013-09-09T19:10:11.087 回答
0

您可以使用Comparator来做到这一点。这个线程有一些对 C++ 有用的信息。Java中的示例代码就像,

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

        }
    });

compare方法中进行比较登录并返回相关值以对数组进行相应的排序。

于 2017-01-25T14:15:16.037 回答