<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)  編輯  收藏 所屬分類: 算法

    主站蜘蛛池模板: 亚洲国产成人久久综合区| 永久免费的网站在线观看| 亚洲区日韩区无码区| 国产亚洲福利精品一区二区| 日本免费观看网站| 亚洲熟妇久久精品| 日本免费的一级v一片| 国产成人综合亚洲| 亚洲AⅤ无码一区二区三区在线 | 亚洲神级电影国语版| 69视频免费观看l| 亚洲乱码在线播放| 日韩人妻无码免费视频一区二区三区| 亚洲国产成人久久精品软件 | 久久嫩草影院免费看夜色| 亚洲色婷婷一区二区三区| 久久精品国产免费| 亚洲人成电影青青在线播放| 久久久www成人免费毛片| 色偷偷亚洲第一综合| 亚洲欧洲国产精品香蕉网| 三年片在线观看免费大全电影| 亚洲国产日韩在线一区| 国产真实伦在线视频免费观看| 一级人做人a爰免费视频| 亚洲高清视频在线观看| 国产1024精品视频专区免费| 亚洲精品日韩一区二区小说| 亚洲无码黄色网址| 每天更新的免费av片在线观看 | 一级免费黄色大片| 亚洲综合视频在线| 国产精品无码一区二区三区免费| 精选影视免费在线 | 亚洲精品无码久久久久久久| 美女被免费视频网站a国产| 国产精品青草视频免费播放| 亚洲国产成人超福利久久精品| 国产免费观看黄AV片| 日本免费人成视频在线观看| 亚洲国产精品无码中文lv|