美文网首页
1 - JAVA实现桶排序

1 - JAVA实现桶排序

作者: minminaya | 来源:发表于2017-03-25 00:48 被阅读238次

    思路:

    1. 申请一个十个数的数组a,初始化每一项为0
    2. 读入5个数,假如读入的是3那就a[3]=1,表示3出现了一次,其他输入同理
    3. 然后打印a[0]~a[10],出现了几次就打印几次,
      比如a[1]=0,表示没有1这个数,然后不打印,
      比如a[4]=2,表示4这个数出现了2次,打印2次
      ......
    import java.util.Scanner;
    
    /**
     * @author NIWA
     * 桶排序
     * 
     * 依次输入5个数字,排序
     */
    public class Main {
    
        public static void main(String[] args) {
            int[] a = new int[11];
            //初始化数组每一个为0
            for (int i = 0; i < a.length; i++) {
                a[i] = 0;
            }
    
            //分别输入5个数字
            for (int i = 1; i <= 5; i++) {
                Scanner mScanner = new Scanner(System.in);
                int j = mScanner.nextInt();
                a[j]++;//计数
            }
            
            //依次判断a[0]~a[10]
            for (int i = 0; i <= 10; i++) {
                for (int j = 0; j < a[i]; j++) {//出现了几次就打印几次,顺序排,反着排也行上面一行改为
                    System.out.println(i);
                }
            }
            
        }
    }
    
    

    但是这个有明显的缺点,,假如现在有5个人的名字和分数吗,
    a-2,
    b-4,
    c-6,
    d-8,
    e-4,

    从小到大排序后2-4-4-6-8
    这样就不知道人的排序而只是知道分数的排序


    下面用List集合来改进算法,首先新建一个Bean类,

    
    public class Bean {
    
            String name;
            int a;
        public Bean(int a, String name) {
            this.name = name;
            this.a = a;
        }
        public Bean(int a) {
            this.a = a;
        }
        
    }
    

    类似的,我们可以

    public class Main {
        public static void main(String[] args) {
            //新建List集合,用于存人名和分数的标记
            List<Bean> mList = new ArrayList<>();
            //初始化每一个List中的成绩为0
            for (int i = 0; i < 10; i++) {
                mList.add(new Bean(0));
            }
    
            //分别输入5个数字
            for (int i = 1; i <= 5; i++) {
                Scanner mScanner = new Scanner(System.in);
                int j = mScanner.nextInt();
                Scanner mScannerString = new Scanner(System.in);
                String name = mScannerString.nextLine();
                mList.get(j).a = 1;
                mList.get(j).name = name;
            }
    
            for (int i = 0; i < mList.size(); i++) {
                for (int j = 0; j < mList.get(i).a; j++) {
                    System.out.println(i+mList.get(i).name);
                }
            }
    
        }
    }
    
    

    用List集合这样子实现有一个缺点,不能有重复的分数

    相关文章

      网友评论

          本文标题:1 - JAVA实现桶排序

          本文链接:https://www.haomeiwen.com/subject/ervqottx.html