<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://www.tkk7.com/Files/junglesong/ScoreSorter20080310212653.rar

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

    主站蜘蛛池模板: 成人五级毛片免费播放| 免费看搞黄视频网站| 爱爱帝国亚洲一区二区三区| 亚洲精品无码久久| 亚洲字幕AV一区二区三区四区| 亚洲伊人久久大香线蕉影院| 亚洲精品在线免费观看| 亚洲日本香蕉视频观看视频| 亚洲成人免费在线观看| 亚洲女人18毛片水真多| 亚洲国产成a人v在线| 国产成人亚洲合集青青草原精品 | 国产好大好硬好爽免费不卡| 国产无遮挡又黄又爽免费网站| 中文字幕乱码免费看电影| 免费人成激情视频在线观看冫| 国产精品网站在线观看免费传媒| 国内少妇偷人精品视频免费| 久久久精品免费国产四虎| 国产精品免费无遮挡无码永久视频 | 亚洲国产无线乱码在线观看| 国产精品无码亚洲一区二区三区| 牛牛在线精品免费视频观看| 国产精品福利在线观看免费不卡| a级毛片免费观看视频| 免费国产黄网站在线观看视频| 无码区日韩特区永久免费系列| 成人人观看的免费毛片| 亚洲精品网站在线观看不卡无广告 | 久久性生大片免费观看性| 最新国产乱人伦偷精品免费网站 | 看免费毛片天天看| 波霸在线精品视频免费观看| 亚洲欧洲免费视频| 毛片A级毛片免费播放| 四虎免费影院4hu永久免费| 亚洲日韩激情无码一区| 亚洲精品成人图区| 亚洲AV无码资源在线观看| eeuss影院ss奇兵免费com| 97免费人妻在线视频|