日期:2014-05-20  浏览次数:20748 次

一个关于二维数组排序的问题
这个题目搞得我头痛!请牛人来指教指教!
如下所示:
  总分 年龄
  620 22
  649 43
  700 34
  580 18
  700 25
  700 21
  649 21

题目的要求是这样的: 首先对总分进行升序排序,如果总分相等则对总分相对应的年龄进行升序排序,其他的年龄不动!
如:总分为700的年龄有3个分别为34,25,21,则要对这三个年龄进行排序!其他的不变!要求用二维排序来做!

坐等牛人出现...

------解决方案--------------------
TreeSet compareTo …… 睡觉了 就不写代码了 给你个思路
------解决方案--------------------
来个粗糙版本 - -
Java code

public class TCharNum
{
    public static void  sort(int num[][])
    {
        for (int i = 0; i < num.length; i++)
        {
            for (int j = i + 1; j < num.length; j++)
            {
                if (num[j][0] < num[i][0])
                {
                    int temp = num[j][0];
                    num[j][0] = num[i][0];
                    num[i][0] = temp;
                }
                else if (num[j][0] == num[i][0]) {
                    if (num[j][1] < num[i][1])
                    {
                        int temp = num[j][1];
                        num[j][1] = num[i][1];
                        num[i][1] = temp;
                    }
                }
            }
        }
    }
    public static void  main(String[] args)
    {
         int num[][] = {{600,22},{649,43},{700,34},{580,18},{700,25},{700,21},{649,21},{700,1}};
         sort(num);
             for (int i = 0; i < num.length; i++)
            {
                 System.out.println(num[i][0] + " " + num[i][1]);
            }
    }    
}

------解决方案--------------------
探讨
这个题目搞得我头痛!请牛人来指教指教!
如下所示:
总分 年龄
620 22
649 43
700 34
580 18
700 25
700 21
649 21

题目的要求是这样的: 首先对总分进行升序排序,如果总分相等则对总分相对应的年龄进行升序排序,其他的年龄不动!
如:总分为700的年龄有3个分别为34,25,21,则要对这三个年龄进……

------解决方案--------------------
Java code

public class Demo {
    private double point;
    
    private int age;

    public Demo(double point,int age){
        this.point=point;
        this.age=age;
    }
    public double getPoint() {
        return point;
    }

    public void setPoint(double point) {
        this.point = point;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
import java.util.Arrays;
import java.util.Comparator;
public class Test {
    public static void main(String[] arg) {
        Demo[] demo=new Demo[7];
        demo[0]=new Demo(620,20);
        demo[1]=new Demo(649,43);
        demo[2]=new Demo(700,34);
        demo[3]=new Demo(580,18);
        demo[4]=new Demo(700,25);
        demo[5]=new Demo(700,21);
        demo[6]=new Demo(649,21);
        Arrays.sort(demo,new Comparator<Demo>(){

            public int compare(Demo o1, Demo o2) {
                if(o1.getPoint()<o2.getPoint())
                    return 1;
                else if(o1.getPoint()==o2.getPoint()){
                    if(o1.getAge()<o2.getAge()){
                        return 1;
                    }else if(o1.getAge()==o2.getAge()){
                        return 0;
                    }else
                        return -1;
                }else return -1;
            }
            
        });
        for(Demo d:demo){
            System.out.println(d.getPoint()+" "+d.getAge());
        }

    }
}