A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胥亚辉 黑马帝   /  2012-1-13 13:42  /  2338 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我怎么给学生按分数高低排序啊。代码应该怎么加。我真的迷糊了。

class  Student
{
        private String name;
        private int age;
        private int  list;
       
        Student(String name,int age,int  list)
        {
                this.name = name;
                this.age = age;
                this.list = list;

                getinfo();
        }
        public void getinfo()
        {
                System.out.println("name="+name+"   age="+age+"    list="+list);
               
        }

}
class Studentinfo
{
        public static void main(String[] args)
        {
                Student s1 = new Student("xiaohua",23,66);
                Student s2 = new Student("xiaojun",20,85);
                Student s3 = new Student("xiaoli",20,35);
                Student s4 = new Student("xiaoming",20,78);
                Student s5 = new Student("xiaolan",20,100);

        }
}

7 个回复

正序浏览
沈样 黑马帝 2012-1-19 19:09:35
8#
你这个可以用comparator或者comparable时行排序
回复 使用道具 举报
刘明瑞 黑马帝 2012-1-14 20:36:51
7#
直接丢TreeSet集合里面不就行了么
回复 使用道具 举报
就是把数字取出来,进行排序,排序方法有很多。可以参见毕老师视频中的的冒泡和选择排序。
回复 使用道具 举报
zl918 黑马帝 2012-1-14 10:34:10
报纸
  1. // 利用快速排序,根据学生成绩大小顺序排序
  2.         public static Student[] sortedStu(Student[] stus, int low, int high) {

  3.                 Student s = stus[low];
  4.                 int i = low;
  5.                 int j = high;
  6.                 while (i < j) {

  7.                         // j向前遍历,查找大于s的值
  8.                         while (i < j && (stus[j].getScore() <= s.getScore())) {
  9.                                 j--;
  10.                         }
  11.                         if (i < j) {
  12.                                 stus[i++] = stus[j];
  13.                         }

  14.                         // i向后遍历,查找小于s的值
  15.                         while (i < j && (stus[i].getScore() >= s.getScore())) {
  16.                                 i++;
  17.                         }
  18.                         if (i < j) {
  19.                                 stus[j--] = stus[i];
  20.                         }
  21.                 }

  22.                 stus[i] = s;

  23.                 // 递归,对左子序列做划分
  24.                 if (low < i - 1) {
  25.                         sortedStu(stus, low, i - 1);
  26.                 }
  27.                 // 递归,对右子序列做划分
  28.                 if (high > i + 1) {
  29.                         sortedStu(stus, i + 1, high);
  30.                 }

  31.                 return stus;
  32.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
上面指出了排序代码我就不多说了
说下排序的知识好了

在数据结构的规范中,排序分了很多种,
1插入排序
        直接插入排序
        希尔排序
2交换排序
        冒泡排序
        快速排序
3选择排序
        直接选择排序
        堆排序
4归并排序
5分配排序
        箱排序
        基数排序

我觉得这么多排序还是要了解一下,
一楼回答的是直接选择排序
其次你还要应该要理解冒泡排序,快速排序这两种


快速排序是基于比较的内部排序中被很多人认为的最好方法
献上当年学数据结构时的快速排序代码:
帮忙了解下这个排序

C实现
  1. #include<stdio.h>
  2. void QuickSort(int *a,int low,int high);
  3. int Findpos(int *a,int low,int high);
  4. int main(void){
  5.         int i =0;
  6.         int a[6] = {5,6,58,99,0,12};
  7.         QuickSort(a,0,5);
  8.         for(;i<6;i++){
  9.                 printf("%d ",a[i]);
  10.         }
  11.         printf("\n");
  12.         return 0;
  13. }

  14. void QuickSort(int *a,int low,int high){
  15.         int pos;
  16.         if(low < high){
  17.                 pos = Findpos(a,low,high);
  18.                 QuickSort(a,low,pos-1);
  19.                 QuickSort(a,pos+1,high);
  20.         }
  21. }

  22. int Findpos(int *a,int low,int high){
  23.         int val = a[low];
  24.         while(low < high){
  25.                 while(low < high && a[high]>=val)
  26.                         --high;
  27.                 a[low] = a[high];
  28.                 while(low < high && a[low] <= val)
  29.                         ++low;
  30.                 a[high] = a[low];
  31.         }
  32.         a[low] = val;
  33.         return high;
  34. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
元素Student实现Comparable接口,重写compareTo()方法,存储于TreeSet集合

  1. import java.util.TreeSet;
  2. import java.util.Iterator;
  3. import java.util.Comparator;


  4. class Student implements Comparable
  5. {
  6.   private String name;
  7.   private int age;
  8.   private int list;
  9.   Student(String name, int age, int list)
  10.   {
  11.           this.name=name;
  12.           this.age=age;
  13.           this.list=list;               
  14.   }  
  15.   public void getinfo()
  16.   {
  17.     System.out.println("name="+name+"   age="+age+"    list="+list);
  18.   }
  19.    
  20.   public int compareTo(Object obj)
  21.   {
  22.                   if(!(obj instanceof Student))
  23.                           throw new RuntimeException("不是学生对象");
  24.                   Student o = (Student)obj;
  25.                   if(this.list==o.list)
  26.                           return this.name.compareTo(o.name);
  27.                   else if(this.list>o.list)
  28.                           return 1;
  29.                   else
  30.                           return -1;
  31.   }
  32.   public String toString()
  33.   {
  34.                   return this.name+"-"+this.age+"-"+this.list;       
  35.   }
  36. }

  37. class Test
  38. {
  39.         public static void main(String[] args)
  40.         {
  41.                 TreeSet<Student> ts = new TreeSet<Student>();
  42.                
  43.                 Student s1 = new Student("xiaohua",23,66);
  44.     Student s2 = new Student("xiaojun",20,85);
  45.     Student s3 = new Student("xiaoli",20,35);
  46.     Student s4 = new Student("xiaoming",20,78);
  47.     Student s5 = new Student("xiaolan",20,100);

  48.                 ts.add(s1);
  49.                 ts.add(s2);
  50.                 ts.add(s3);
  51.                 ts.add(s4);
  52.                 ts.add(s5);
  53.                
  54.                 Iterator<Student>it = ts.iterator();
  55.                 while(it.hasNext())
  56.                 {
  57.                         System.out.println(it.next());       
  58.                 }
  59.         }
  60. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
代码仅供参考,关键是理解排序的过程,建议你把学生对象存放到数组中,这样操作起来比较方便:
Student[] stu = new Student[5];//创建数组对象
        stu[0] = new Student("张三", 19, 88);
        stu[1] = new Student("李四", 21, 79);
        stu[2] = new Student("王五", 28, 90);
        stu[3] = new Student("张六", 17, 91);
        stu[4] = new Student("陈七", 23, 99);
for (int i = 1; i < stu.length; i++) {//采用冒泡法排序,外层循环表示总循环趟数
            for (int j = 0; j < stu.length - i; j++) {//内层循环表示每趟循环次数
                if (stu[j].getScore() > stu[j + 1].getScore()) {
                    Student s = null;
                    s = stu[j];
                    stu[j] = stu[j + 1];
                    stu[j + 1] = s;
                }
            }
   

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马