如何排序2D数组?

时间:2013-09-09 19:03:44

标签: java arrays sorting

我需要帮助排序2D数组。我有两行数组

[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 个答案:

答案 0 :(得分:4)

转置2D数组java multi-dimensional array transposing

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

再次转置结果:

e.g。

来自:[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]

或自己实施快速排序。

答案 1 :(得分:1)

编辑(OP改变配方后):

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

您可以使用比较器来执行此操作。 This thread has some useful information for 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方法中进行比较登录并返回相关值以相应地对数组进行排序。