今天看了一本书,书里有道题,题目很常见,排序,明了点说:

需求:输入:最多有n个正整数,每个数都小于n,

n为107 ,没有重复的整数

输出:按升序排列

思路:假设有一组集合 {1,3,5,6,11,12},我们可以用字符串来表示这组集合,0 1 0 1 0 1 1 0 0 0 0 1 1 代表集合中的数值的位为1,其他的都为0.

伪代码:

 //  将一个字符数组全部置为0,大小为给的数据中的最大值 
  for i = (0,n)   
       ch[i] = 0;   
  for each i in the int[]   
       ch[i] = 1;   
  for i = (0,n)   
         if ch[i] == 1 then   
            print();

实现代码:

   1:      public static void main(String[] args) {
   2:          long start = System.currentTimeMillis();
   3:          int max=100000001; //因为要在第100000000位上置1,所以max>100000000
   4:          int b_sort[]={12,1,5,4,8,11,10,22,33,44,11,100000000,3,4432,32425,423423,1241,41241,4234121,421414,124144,12341414,34,242};
   5:          //初始化Char[],全部置为0
   6:          char[] ch_sort = new char[max];
   7:          for(int i=0;i<max;i++){
   8:              char ch='0';
   9:              ch_sort[i]=ch;
  10:          }
  11:          //在相应的位置上置1
  12:          for (int i=0;i<b_sort.length;i++){
  13:              ch_sort[b_sort[i]]='1';
  14:          }
  15:          //输出Index,同时排序结束
  16:          for(int i=0;i<max;i++){
  17:              if (ch_sort[i] == '1'){
  18:                  System.out.println(i+"  ");
  19:              }
  20:          }
  21:          //运行时间    
  22:          long end = System.currentTimeMillis();
  23:          System.out.println("运行时间:" + (end - start) + "毫秒");
  24:      } 
       在满足一定的需求上,这种排序算法还是很高效,有效的,甚至不仅排序,去除重复项什么的也是不错的选择,算法算法,能捉老鼠的都是好猫。很多时候给你点提示解决问题就变的理所当然了,但却不能第一时间想到,这是需要提高的地方。
       续:昨晚就想把重复的也给排出来,早上发现这个和计数排序就是一个模样
   1:  public static void main(String[] args) {
   2:          long start = System.currentTimeMillis();
   3:          int max=100000001;
   4:          int b_sort[]={12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,4,4,8,11,8,10,22,1,33,44,33,11,100000000,3,4432,32425,423423,1241,41241,4234121,421414,124144,12341414,34,242};
   5:          char[] ch_sort = new char[max];
   6:          for(int i=0;i<max;i++){
   7:              char ch='0';
   8:              ch_sort[i]=ch;
   9:          }
  10:   
  11:          for (int i=0;i<b_sort.length;i++){
  12:              ch_sort[b_sort[i]]+=1;
  13:          }
  14:   
  15:          for(int i=0;i<max;i++){
  16:              
  17:              if(ch_sort[i] != '0'){
  18:                  int a=0;
  19:                  a=(int)ch_sort[i]-48;
  20:                  for (int j=0;j<a;j++){
  21:                  System.out.print(i+"  ");
  22:                      }
  23:              }
  24:          }
  25:          
  26:          long end = System.currentTimeMillis();
  27:          System.out.println("运行时间:" + (end - start) + "毫秒");
  28:      }

      既然能置1,当然也能置2置3,但是如果重复项超出ascii码怎么办?

计数排序-java的更多相关文章

  1. 计数排序详解以及java实现

    前言 我们知道,通过比较两个数大小来进行排序的算法(比如插入排序,合并排序,以及上文提到的快速排序等)的时间复杂度至少是Θ(nlgn),这是因为比较排序对应的决策树的高度至少是Θ(nlgn),所以排序 ...

  2. 算法-java代码实现计数排序

    计数排序   第10节 计数排序练习题 对于一个int数组,请编写一个计数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3], ...

  3. Java实现堆排序和计数排序

    堆排序代码: 思想:每次都取堆顶的元素,将其放在序列最后面,然后将剩余的元素重新调整为最小堆,依次类推,最终得到排序的序列. import java.util.Arrays; /** * 思路:首先要 ...

  4. 排序基础之非比较的计数排序、桶排序、基数排序(Java实现)

    转载请注明原文地址: http://www.cnblogs.com/ygj0930/p/6639353.html  比较和非比较排序 快速排序.归并排序.堆排序.冒泡排序等比较排序,每个数都必须和其他 ...

  5. 排序算法-计数排序(Java)

    package com.rao.sort; import java.util.Arrays; /** * @author Srao * @className CountSort * @date 201 ...

  6. Java排序之计数排序

    Java排序之计数排序 计数排序思路 计数排序适用于有明确范围的数组,比如给定一个数组,且知道所有值得范围是[m,n].这个时候可以使用一个n-m+1长度的数组,待排序的数组就可以散在这个数组上,数组 ...

  7. 计数排序和桶排序(Java实现)

    目录 比较和非比较的区别 计数排序 计数排序适用数据范围 过程分析 桶排序 网络流传桶排序算法勘误 桶排序适用数据范围 过程分析 比较和非比较的区别 常见的快速排序.归并排序.堆排序.冒泡排序等属于比 ...

  8. 桶排序和计数排序的理解实现和比较(Java)

    比较和非比较的区别 常见的快速排序.归并排序.堆排序.冒泡排序等属于比较排序.在排序的最终结果里,元素之间的次序依赖于它们之间的比较.每个数都必须和其他数进行比较,才能确定自己的位置.比较排序的优势是 ...

  9. Java实现基于桶式排序思想和计数排序思想实现的基数排序

    计数排序 前提:待排序表中的所有待排序关键字必须互不相同: 思想:计数排序算法针对表中的每个记录,扫描待排序的表一趟,统计表中有多少个记录的关键码比该记录的关键码小,假设针对某一个记录,统计出的计数值 ...

随机推荐

  1. 关于TxQBService报的错,腾讯你真牛B啊

    腾讯你真牛B啊,浏览器都7了,还特么的报这么低级的错误,还每10秒写一条windows日志,让人有什么心情用你的浏览器,滚.

  2. SAP 工厂日生产计划待排维护

    *&---------------------------------------------------------------------* *& Report  ZPPR0024 ...

  3. Greedy:Subsequence(POJ 3061)

      和最短序列 题目大意:找出一个序列中比至少和S相等的最短子序列(连续的) 本来这道题可以二分法来做复杂度O(NlogN),也可以用一个类似于游标卡尺的方法O(N)来做 先来讲游标卡尺法: 因为子序 ...

  4. C Primer Plus_第三章_数据和C_复习题与编程练习

    Review long代替int类型变量的原因是什么? 在您的系统中,long可以容纳比int更大的数:如果您确实需要处理更大的值,那么使用一种在所有系统上都保证至少是32位的类型会使程序的可移植性更 ...

  5. 【XLL 文档翻译】【第2部分】C API 回调函数 Excel4, Excel12

    Excel4 和 Excel12 函数使得 DLL 可以调用 Excel 工作表函数.宏表函数.命令.XLL特定函数或命令.最近的一些 Excel 版本都支持 Excel12 函数.这两个函数支持下面 ...

  6. ios添加百度地图方法

    Hello BaiduMapiOS SDK 引入头文件 引入静态库文件 引入系统framework 引入mapapi.bundle资源文件 初始化BMKMapManager 创建BMKMapView ...

  7. 瞧一瞧迷一般的SQLDA

    With static SQL, host variables used in embedded SQL statements are known at application compile tim ...

  8. NYOJ题目34韩信点兵

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAskAAAHiCAIAAACV1MbSAAAgAElEQVR4nO3dPXLjONeG4W8TyrUQx1 ...

  9. ThinkPHP入门(二)

    smarty使用 smarty引入流程 1. 控制器IndexAction.class.php function index() $this -> display(); (父类Action的di ...

  10. 解决passwd 为普通用户设密码 不成功的方法

    echo "xxxxxxxxx"|passwd --stdin user_name #这样设置密码就可以成功!