Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何对二维数组进行排序?_Java_Arrays_Sorting - Fatal编程技术网

Java 如何对二维数组进行排序?

Java 如何对二维数组进行排序?,java,arrays,sorting,Java,Arrays,Sorting,我需要帮助排序二维数组。我有两行数组 [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++) { i

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

[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;
               }
           }
       }
    }
for(int i=0;i数组[0][j+1]){
对于(int k=0;k<2;k++){
int tmp=数组[k][j];
数组[k][j]=数组[k][j+1];
数组[k][j+1]=tmp;
}
}
}
}

您考虑过合并排序算法吗

在这种情况下,这应该是最快的。 (wiki中也提供了一个抽象实现)

编辑(OP更改公式后):

您可以将所有这些数据收集到地图上,然后按键对其进行排序。收集到映射是O(n),您可以使用有序映射实现免费获得排序。转置在我看来更昂贵

转置2D阵列


使用
array.sort(T[]a,Comparator您可以使用Comparator来实现这一点

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

        }
    });
Arrays.sort(一个新的比较器(){
@凌驾
公共整数比较(长[]o1,长[]o2){
长t1=o1[1];
长p1=o1[0];
长t2=o2[1];
长p2=o2[0];
如果(t1==t2){
返回(p1>p2?1:(p1==p2?0:-1));
}否则{
返回(t1

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

如果需要快速排序,可以使用
[1,2,3,4,5][40,50,20,30,10]
它是如何精确排序的?看起来你有某种地图或字典。你考虑过使用不同的数据结构吗?可能是重复的否,我需要按照第二行的相同顺序对第一行进行排序。第一行是索引,第二行是值。@JakubMartinek这就可以了。将2d数组转换为
Map
。快速排序键集(或您想要使用的任何算法)。然后,如果出于某种原因,它确实必须是一个
数组
,则通过迭代
映射
键集
,将其转换回数组。这是一个很好的解决方案,前提是键必须是唯一的,任何重复的键都将被删除discarded@StormeHawke,这是对我上一篇博文编辑的评论,其中由于问题陈述不正确,我给出了错误的答案:)@cdoh。我的错:)