zoukankan      html  css  js  c++  java
  • 计数排序

    算法导论云:“计数排序假设n个输入元素中的每一个都是在0到k区间内的一个整数,其中k为某个整数。当k=O(n)时,排序的运行时间是O(n)”。

    百度云:“计数排序的基本思想是对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素的个数。一旦有了这个信息,就可以将x直接存放到最终的输出序列的正确位置上。

    下面用java来实现:

     1 import java.util.Arrays;
     2 
     3 public class CountSort {
     4     public static void main(String[] args) {
     5         String str = "ededcbcaba";
     6         char[] chs = str.toCharArray();
     7         sort(chs);
     8     }
     9 
    10     private static void sort(char[] chs) {
    11         int[] c = new int[26];
    12         char[] b = new char[chs.length];
    13         for (int i = 0; i < chs.length; i++) {
    14             c[chs[i] - 'a']++;
    15         }
    16         System.out.println(Arrays.toString(c));
    17         for (int i = 1; i < c.length; i++) {
    18             c[i] = c[i - 1] + c[i];
    19         }
    20         System.out.println(Arrays.toString(c));
    21         for (int i = 0; i < chs.length; i++) {
    22             char tmp = b[c[chs[i] - 'a'] - 1];
    23             // 注:此判断是为了防止有重复的值,如果发现这个下标上已经有值了,那么就赋到前一个下标上去。
    24             if (tmp != 0) {
    25                 b[c[chs[i] - 'a'] - 2] = chs[i];
    26             } else {
    27                 b[c[chs[i] - 'a'] - 1] = chs[i];
    28             }
    29         }
    30         System.out.println(Arrays.toString(b));
    31     }
    32 }
  • 相关阅读:
    mysql外键添加error1215
    shell命令获取最新文件的名称
    centos7 apache提供文件下载
    centos7 时间设置
    微服务通信的类型
    angular-cli
    npm
    模块相关
    加油!冲冲冲
    软件评测
  • 原文地址:https://www.cnblogs.com/huashui/p/3369362.html
Copyright © 2011-2022 走看看