zoukankan      html  css  js  c++  java
  • Java CountingSort

    Java CountingSort

    /**
     * <html>
     * <body>
     *  <P> Copyright 1994-2018 JasonInternational </p>
     *  <p> All rights reserved.</p>
     *  <p> Created on 2018年4月10日 </p>
     *  <p> Created by Jason</p>
     *  </body>
     * </html>
     */
    package cn.ucaner.algorithm.sorts;
    
    /**
     * Counting sort is an algorithm for sorting a collection of objects according
     * to keys that are small integers; that is, it is an integer sorting algorithm.
     * It operates by counting the number of objects that have each distinct key
     * value, and using arithmetic on those counts to determine the positions of
     * each key value in the output sequence. 
     * <p>
     * Family: Counting.<br>
     * Space: An Array of length r.<br> 
     * Stable: True.<br>
     * <p>
     * Average case = O(n+r)<br>
     * Worst case = O(n+r)<br>
     * Best case = O(n+r)<br>
     * <p> 
     * NOTE: r is the range of numbers (0 to r) to be sorted.
     * <p>
     * @see <a href="https://en.wikipedia.org/wiki/Counting_sort">Counting Sort (Wikipedia)</a>
     * <br>
     * @author Justin Wetherell <phishman3579@gmail.com>
     */
    public class CountingSort {
    
        private CountingSort() { }
    
        public static Integer[] sort(Integer[] unsorted) {
            int maxValue = findMax(unsorted);
            int[] counts = new int[maxValue + 1];
            updateCounts(unsorted, counts);
            populateCounts(unsorted, counts);
            return unsorted;
        }
    
        private static int findMax(Integer[] unsorted) {
            int max = Integer.MIN_VALUE;
            for (int i : unsorted) {
                if (i > max)
                    max = i;
            }
            return max;
        }
    
        private static void updateCounts(Integer[] unsorted, int[] counts) {
            for (int e : unsorted)
                counts[e]++;
        }
    
        private static void populateCounts(Integer[] unsorted, int[] counts) {
            int index = 0;
            for (int i = 0; i < counts.length; i++) {
                int e = counts[i];
                while (e > 0) {
                    unsorted[index++] = i;
                    e--;
                }
            }
        }
    }
    

      

  • 相关阅读:
    python3 初识GUI
    UI自动化测试底层原理
    Oracle导入数据无法导出空表的问题
    Oracle导入大数据量(百万以上)dmp文件,报错ora-12592 :包错误
    selenium 不同版本Driver
    selenium3 调用IE Unable to get browser
    记录错误,服务器上运行自动化脚本找不到窗口。
    python3 实现对代码文件中注释的翻译
    python3 通过邮件发送测试报告
    es6数值类型
  • 原文地址:https://www.cnblogs.com/jasonandy/p/9243205.html
Copyright © 2011-2022 走看看