JAVA中如何对二维数组的每一列进行排序

排成一个每列都是有序的,但每行无序的二维数组
也就是说只对列排序
对一个已有的二维数组每列排序
谢谢各位了,我会补加分数的!!!

我就是举一个num[3][3]的例子啊
如果是更大的数组,只要改动一下代码中 i,j的值就可以了
我也正在学java,
QQ:374122021,希望能多交流,一起进步

刚开始忽略了一个小东西,现在可以了

public class Test
{
public static void main(String[] args)
{
MyTest t=new MyTest();
t.f();
t.print();
}
}
class MyTest
{
int [][] num=new int[][]{{2,3,8},{9,1,6},{3,5,7}};
int t;
void f()
{
for(int j=0;j<3;j++)
for(int k=0;k<2;k++)
for(int i=0;i<2;i++)
{
if(num[i][j]>num[i+1][j])
{t=num[i][j];num[i][j]=num[i+1][j];num[i+1][j]=t;}
}
}
void print()
{
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
System.out.print(num[i][j]+" ");
System.out.println();
}
}

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-04-02
import java.util.Iterator;
import java.util.TreeSet;
import java.util.Vector;

public class Test {
//转置方法
public int[][] transpose(int[][] org){
int temp[][]=new int[org[0].length][org.length];
for(int i=0;i<temp.length;i++){
for(int j=0;j<temp[i].length;j++)
temp[i][j]=org[j][i];
}
return temp;
}
//TreeSet 排序
public int[][] sortedByCol(int[][] org){
TreeSet[] temp=new TreeSet[org.length];
//Vector 初始化
for(int i=0;i<temp.length;i++)
temp[i]=new TreeSet();
//放入Vector自动排序
for(int i=0;i<org.length;i++){
for(int j=0;j<org[i].length;j++)
temp[i].add(org[i][j]);
}
//替换数组元素
for(int i=0;i<temp.length;i++){
Iterator it=temp[i].iterator();
for(int j=0;j<temp[i].size();j++)
org[i][j]=(Integer)it.next();
}
return org;
}
public void run(int[][] org){
//打印原数组
printArray(org);
System.out.println();
//转置
int[][] temp=transpose(org);
//放入TreeSet排序
temp=sortedByCol(temp);
//转置
int[][] newArr=transpose(temp);
//打印新数组
printArray(newArr);
}
//打印
public void printArray(int[][] array){
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.println();
}
}
public static void main(String[] args) {
int a[][]={{9,2,3,4},{5,6,7,8},{0,6,2,3}};
new Test().run(a);
}

}

把二维数组传到run方法中就可以拉,随便输!
第2个回答  推荐于2016-10-31
public void sortlie()//标准的冒泡
{
for(int j=0;j<lie;j++)
{
for(int outer=hang-1;outer>0;outer--)
{
for(int inner=0;inner<outer;inner++)
{
if(a[inner][j]>a[inner+1][j])
{
int temp=a[inner][j];
a[inner][j]=a[inner+1][j];
a[inner+1][j]=temp;
}
}
}
}
}本回答被提问者采纳
第3个回答  2007-04-01
import java.lang.Math;
import java.util.Scanner;
class AarrayReverse
{
public static void main(String args[])
{
int a[]=new int[20];
for(int i=0;i<=15;i++)
{
Scanner sca=new Scanner(System.in);
System.out.println("请输数组元素a["+"]");
a[i]=sca.nextInt();
}
for(int i=0;i<=100;i++)
{
int middle=(int)(a.length/2*Math.random());
int radius=(int)(middle*Math.random());
int t;
t=a[middle-radius+1];
a[middle-radius+1]=a[middle+radius+3];
a[middle+radius+3]=t;
}
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
System.out.println();
}
}
当然这里的数组可以自己定义.
循环的次数越多越好..
当数组长度为10,middle=5,radius=5时middle+radius+3=13;就越界了。改为:

mid=(int)((a.length/2)*Math.random()); radium=(int)((mid+1)*Math.random()); temp=a[mid-radium]; a[mid-radium]=a[mid+radium+1]; a[mid+radium+1]=temp;
第4个回答  2007-04-05
逻辑上未必可行的呀~~
假如用这个数组:
int[] num = {
{3, 3, 3},
{1, 1, 1},
{2, 2, 2}
}
列必然是无序的吧~
不晓得是不是误会楼主的意思了~~多多指教~~