Java中的多维数组按某列排序的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的多维数组按某列排序的方法相关的知识,希望对你有一定的参考价值。

下面举个例子,比如
int ch1[][] = new int[][]0.25, 100,0.75, 80,0.5, 120,0.8, 150;
我想按照数组的第一列进行降序排序,达到的效果是
0.8 150
0.75 80
0.5 120
0.25 100
该怎么做呢?望高手指点
double ch1[][] = new double[][]0.25, 100,0.75, 80,0.5, 120,0.8, 150;

可以通过循环比较特定列,之后多次循环排序的形式实现。
举例:
import java.util.Arrays;

import java.util.Comparator;
public class ArraySort

public static void sort(int[][] ob, final int[] order)
Arrays.sort(ob, new Comparator<Object>()
public int compare(Object o1, Object o2)
int[] one = (int[]) o1;
int[] two = (int[]) o2;
for (int i = 0; i < order.length; i++)
int k = order[i];
if (one[k] > two[k])
return 1;
else if (one[k] < two[k])
return -1;
else
continue; //如果按一条件比较结果相等,就使用第二个条件进行比较。


return 0;

);

public static void main(String[] args)
int array[][] = new int[][]
12, 34, 68, 32, 9, 12, 545 ,
34, 72, 82, 57, 56, 0, 213 ,
12, 34, 68, 32, 21, 945, 23 ,
91, 10, 3, 2354, 73, 34, 18 ,
12, 83, 189, 26, 27, 98, 33 ,
47, 23, 889, 24, 899, 23, 657 ,
12, 34, 68, 343, 878, 235, 768 ,
12, 34, 98, 56, 78, 12, 546 ,
26, 78, 2365, 78, 34, 256, 873 ;
sort(array, new int[] 0,1); //先根据第一列比较,若相同则再比较第二列
for (int i = 0; i < array.length; i++)
for (int j = 0; j < array[i].length; j++)
System.out.print(array[i][j]);
System.out.print("\t");

System.out.println();


参考技术A 你给的例子中二维数组类型是int,里面却有小数。我换个例子来测试。可以仿照此换成其他数组类型。
/**sai 20100324 */
public class SortArrays
public static void main(String[] args)
//要比较的二维数组
int ch1[][] = new int[][] 25, 100 , 75, 80 ,
50, 120 , 80, 150 ;
//冒泡比较,但记住,比较浮点型是危险的
for (int i = 0; i < ch1.length-1; i++)
for (int j = 0; j < ch1.length - i - 1; j++)
if (ch1[j][0] < ch1[j + 1][0])
int[] d = ch1[j];
ch1[j] = ch1[j + 1];
ch1[j + 1] = d;



//输出测试
for(int[] d:ch1)

for(int s:d)
System.out.print(s+" ");
System.out.println();



本回答被提问者采纳
参考技术B 既然是int数组,怎么可能出现小数点呢?追问

刚才写错了 是double数组 问题补充里已说明

追答

返回一定是要double数组么还是?

如果要升序排列,就把那个比较那个方法里面1和-1调换就可以了

import java.util.Arrays;
import java.util.Comparator;

public class Du

public static void main(String[] args)

double ch1[][] = new double[][] 0.25, 100 , 0.75, 80 , 0.5, 120 , 0.8, 150 ;

AryItem[] itemAry = new AryItem[ch1.length];

for (int i = 0; i

public int compare(AryItem o1, AryItem o2)
if (o1.getSecondElement() < o2.getSecondElement())
return 1;
else if (o1.getSecondElement() == o2.getSecondElement())
return 0;
else
return -1;





class AryItem
public double firstElement;

public double secondElement;

public AryItem(double first, double second)
this.firstElement = first;
this.secondElement = second;


public double getSecondElement()
return secondElement;


public String toString()
return firstElement + "\t" + secondElement;



------------------
0.8 150.0
0.5 120.0
0.25 100.0
0.75 80.0

以上是关于Java中的多维数组按某列排序的方法的主要内容,如果未能解决你的问题,请参考以下文章

java二维数组 按某列排序

二维数组按某列排序

数据库中数据写入多维数组,如何实现?

排序与其他相关联的多维数组中的数组

Java 和 C# 中的多维数组

如何针对 C、C++ 或 Fortran 中的另一个多维数组快速对多维数组进行十亿点排序?