<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    和風細雨

    世上本無難事,心以為難,斯乃真難。茍不存一難之見于心,則運用之術自出。

    考試分數排序的三種排序方式的比較

    考試分數排序是一種特殊的排序方式,從0分到最高分都可能有成績存在,如果考生數量巨大如高考,大量考生都在同一分數上,如果需要從低到高排序的話,很多同樣分數的成績也被比較了,這對排序結果是沒有意義的,因為同一分數不需要比較,對于這種情況如果使用傳統排序就會有浪費,如果先按分數建立好檔次,再把考生成績按分數放入檔次就可以了。下面分別列出了三種方案的代碼和比較結果:

    學生類:
    package com.junglesong;

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import java.util.Random;


    public class Student implements Comparable{
        
    private String name;
        
    private int score;
        
        
    public Student(String name,int score){
            
    this.name=name;
            
    this.score=score;
        }

        
        
    public int compareTo(Object obj){
            Student another
    =(Student)obj;        
            
    return this.score-another.score;
        }

        
        
    public String toString(){
            
    return "學生姓名="+name+" 分數="+score;
        }

        
    public String getName() {
            
    return name;
        }


        
    public void setName(String name) {
            
    this.name = name;
        }


        
    public int getScore() {
            
    return score;
        }


        
    public void setScore(int score) {
            
    this.score = score;
        }

    }


    第一種傳統排序方案的代碼:
        public static void main(String[] args){
            
    //-----------老排序方案-----------        
            TimeTest oldSortTest=new TimeTest();
            List
    <Student> scores=new ArrayList<Student>();
            
            Random random
    =new Random();
            
    for(int i=0;i<1000*100;i++){
                scores.add(
    new Student("學生"+i,random.nextInt(100)));
            }

            
            
            Collections.sort(scores);
            
    /*for(Student student:scores){
                System.out.println(student);
            }
    */

            oldSortTest.end(
    "老排序方案耗時");
        }

    第二種使用LinkedLinkedHashMap分檔排序:
    package com.junglesong;

    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.LinkedHashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Random;

    /**
     * 學生分數排序類(LinkedHashMap實現)
     * 
    @author: sitinspring(junglesong@gmail.com)
     * @date: 2008-3-4
     
    */

    public class LinkedHashMapScoreSorter{
        
    /**
         * 學生成績單
         
    */

        
    private Map<Integer,List<Student>> scoreSheet;
        
        
    /**
         * 滿分分數
         
    */

        
    private final int maxScore; 
        
        
    /**
         * 構造函數
         * 
    @param MaxScore: 滿分分數
         
    */

        
    public LinkedHashMapScoreSorter(int MaxScore){
            
    this.maxScore=MaxScore;
            scoreSheet
    =new LinkedHashMap<Integer,List<Student>>();
            
            
    for(int i=0;i<=maxScore;i++){
                List
    <Student> ls=new ArrayList<Student>();
                scoreSheet.put(i, ls);
            }

        }

        
        
    /**
         * 添加一個學生成績
         * 
    @param student
         
    */

        
    public void addStudent(Student student){
            
    int score=student.getScore();
            
    if(student.getScore()>maxScore){
                
    return;
            }

            
            List
    <Student> ls=scoreSheet.get(score);
            ls.add(student);
        }

        
        
    /**
         * 得到從低到高的學生成績表
         *
         
    */

        @SuppressWarnings(
    "unchecked")
        
    public List<Student> getSortedScores(){
            List
    <Student> retval=new ArrayList<Student>();
            
            Iterator it
    =scoreSheet.values().iterator();

            
    while(it.hasNext()){
                List
    <Student> ls=(List<Student>)it.next();
                retval.addAll(ls);
            }

            
            
    return retval;
        }

        
        
    public static void main(String[] args){
            TimeTest sortTest
    =new TimeTest();
            
    int maxScore=100;
            LinkedHashMapScoreSorter sorter2
    =new LinkedHashMapScoreSorter(maxScore);
            
            Random random
    =new Random();
            
    for(int i=0;i<1000*100;i++){
                sorter2.addStudent(
    new Student("學生"+i,random.nextInt(maxScore+1)));
            }

            sortTest.end(
    "LinkedHashMap排序方案耗時");    
            
            List
    <Student> ls=sorter2.getSortedScores();
            
    /*for(Student student:ls){
                System.out.println(student);
            }
    */

            
        }

    }


    第三種使用數組實現分檔:
    package com.junglesong;

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;

    import org.apache.log4j.Logger;

    /**
     * 學生分數排序類(數組實現)
     * 
    @author: sitinspring(junglesong@gmail.com)
     * @date: 2008-3-4
     
    */

    public class ArrayScoreSorter{
        
        
    /**
         * 學生成績單
         
    */

        
    private List<Student>[] scoreSheet;
        
        
    /**
         * 滿分分數
         
    */

        
    private final int maxScore; 
        
        
    /**
         * 構造函數
         * 
    @param MaxScore: 滿分分數
         
    */

        @SuppressWarnings(
    "unchecked")
        
    public ArrayScoreSorter(int MaxScore){
            
    this.maxScore=MaxScore;
            scoreSheet
    =new ArrayList[this.maxScore+1];
            
            
    for(int i=0;i<=maxScore;i++){
                scoreSheet[i]
    =new ArrayList<Student>();
            }

        }

        
        
    /**
         * 添加一個學生成績
         * 
    @param student
         
    */

        
    public void addStudent(Student student){
            
    int score=student.getScore();
            
    if(student.getScore()>maxScore){
                
    return;
            }

            
            List
    <Student> ls=scoreSheet[score];
            ls.add(student);
        }

        
        
    /**
         * 得到從低到高的學生成績表
         *
         
    */

        @SuppressWarnings(
    "unchecked")
        
    public List<Student> getSortedScores(){
            List
    <Student> retval=new ArrayList<Student>();
            
            
    for(List<Student> ls:scoreSheet){
                retval.addAll(ls);
            }

            
            
    return retval;
        }

        
        
    public static void main(String[] args){
            TimeTest sortTest
    =new TimeTest();
            
    int maxScore=100;
            ArrayScoreSorter sorter
    =new ArrayScoreSorter(maxScore);
            
            Random random
    =new Random();
            
    for(int i=0;i<1000*100;i++){
                sorter.addStudent(
    new Student("學生"+i,random.nextInt(maxScore+1)));
            }

            sortTest.end(
    "數組排序方案耗時");
            
            List
    <Student> ls=sorter.getSortedScores();
            
    /*for(Student student:ls){
                System.out.println(student);
            }
    */

            
        }

    }


    比較結果如下:
    2008-03-10 20:53:52,218  INFO [main] (TimeTest.java:28- LinkedHashMap排序方案耗時 453毫秒
    2008-03-10 20:53:56,140  INFO [main] (TimeTest.java:28- LinkedHashMap排序方案耗時 438毫秒
    2008-03-10 20:53:59,031  INFO [main] (TimeTest.java:28- LinkedHashMap排序方案耗時 453毫秒
    2008-03-10 20:54:02,000  INFO [main] (TimeTest.java:28- LinkedHashMap排序方案耗時 485毫秒
    2008-03-10 20:54:04,453  INFO [main] (TimeTest.java:28- LinkedHashMap排序方案耗時 453毫秒
    2008-03-10 20:54:07,421  INFO [main] (TimeTest.java:28- LinkedHashMap排序方案耗時 437毫秒
    2008-03-10 20:54:10,531  INFO [main] (TimeTest.java:28- LinkedHashMap排序方案耗時 437毫秒
    2008-03-10 20:54:13,359  INFO [main] (TimeTest.java:28- LinkedHashMap排序方案耗時 453毫秒
    2008-03-10 20:54:20,250  INFO [main] (TimeTest.java:28- 老排序方案耗時 500毫秒
    2008-03-10 20:54:23,421  INFO [main] (TimeTest.java:28- 老排序方案耗時 485毫秒
    2008-03-10 20:54:26,812  INFO [main] (TimeTest.java:28- 老排序方案耗時 500毫秒
    2008-03-10 20:54:30,093  INFO [main] (TimeTest.java:28- 老排序方案耗時 515毫秒
    2008-03-10 20:54:32,968  INFO [main] (TimeTest.java:28- 老排序方案耗時 500毫秒
    2008-03-10 20:54:35,906  INFO [main] (TimeTest.java:28- 老排序方案耗時 516毫秒
    2008-03-10 20:54:38,953  INFO [main] (TimeTest.java:28- 老排序方案耗時 516毫秒
    2008-03-10 20:54:41,796  INFO [main] (TimeTest.java:28- 老排序方案耗時 515毫秒
    2008-03-10 20:54:45,671  INFO [main] (TimeTest.java:28- 老排序方案耗時 500毫秒
    2008-03-10 20:54:48,921  INFO [main] (TimeTest.java:28- 老排序方案耗時 500毫秒
    2008-03-10 20:54:56,500  INFO [main] (TimeTest.java:28- 數組排序方案耗時 422毫秒
    2008-03-10 20:54:59,250  INFO [main] (TimeTest.java:28- 數組排序方案耗時 422毫秒
    2008-03-10 20:55:01,921  INFO [main] (TimeTest.java:28- 數組排序方案耗時 437毫秒
    2008-03-10 20:55:05,281  INFO [main] (TimeTest.java:28- 數組排序方案耗時 438毫秒
    2008-03-10 20:55:08,484  INFO [main] (TimeTest.java:28- 數組排序方案耗時 438毫秒
    2008-03-10 20:55:11,250  INFO [main] (TimeTest.java:28- 數組排序方案耗時 422毫秒
    2008-03-10 20:55:14,234  INFO [main] (TimeTest.java:28- 數組排序方案耗時 422毫秒
    2008-03-10 20:55:17,312  INFO [main] (TimeTest.java:28- 數組排序方案耗時 422毫秒
    2008-03-10 20:55:20,546  INFO [main] (TimeTest.java:28- 數組排序方案耗時 437毫秒
    2008-03-10 20:55:24,500  INFO [main] (TimeTest.java:28- 數組排序方案耗時 422毫秒
    2008-03-10 20:55:27,640  INFO [main] (TimeTest.java:28- 數組排序方案耗時 437毫秒
    2008-03-10 20:55:30,750  INFO [main] (TimeTest.java:28- 數組排序方案耗時 422毫秒
    2008-03-10 20:55:34,171  INFO [main] (TimeTest.java:28- 數組排序方案耗時 421毫秒

    結果不難預料,數組方案平均最低,LinkedHashMap次之,因為它還要花時間產生hashCode,傳統排序最低,因為對相同數據進行比較無謂的浪費了時間。

    程序下載:
    http://m.tkk7.com/Files/junglesong/ScoreSorter20080310212653.rar

    posted on 2008-03-10 21:20 和風細雨 閱讀(1397) 評論(0)  編輯  收藏 所屬分類: 算法

    主站蜘蛛池模板: 国产精品成人亚洲| 高清免费久久午夜精品| 日本人的色道www免费一区| 成年人免费视频观看| 免费观看亚洲人成网站| 国产日韩亚洲大尺度高清| 91精品免费国产高清在线| 福利片免费一区二区三区| 亚洲av日韩av高潮潮喷无码| 无码国产精品一区二区免费虚拟VR| 久久人午夜亚洲精品无码区 | 在线观看免费视频一区| 亚洲人成色77777在线观看大| 在线播放免费人成毛片乱码| 亚洲日韩一中文字暮| 亚洲AV无码一区东京热久久 | 亚洲AV无码一区二区乱子伦 | 亚洲午夜久久久影院| 国产在线国偷精品产拍免费| 在线观看免费视频一区| 亚洲色大成网站www永久男同| 免费看黄视频网站| 中文字幕免费在线视频| 最新国产精品亚洲| 亚洲男人的天堂在线播放| 在线a亚洲v天堂网2018| 深夜免费在线视频| 亚洲av成人综合网| 亚洲人成网站在线播放影院在线| 免费日本黄色网址| 歪歪漫画在线观看官网免费阅读| 两个人看www免费视频| 国产精品亚洲精品久久精品 | 精品无码一级毛片免费视频观看| 亚洲天堂2016| 亚洲综合网美国十次| 在线亚洲人成电影网站色www| 免费91最新地址永久入口| 亚洲av无码片vr一区二区三区| 亚洲第一成年网站大全亚洲| 国产av天堂亚洲国产av天堂|