桶排序
  1. publicstaticvoid bucketSort(int[] a,int max){
  2.         int[] buckets;
  3.  
  4.         if(a==null || max<1)
  5.             return;
  6.  
  7.         buckets =newint[max]; // 创建一个容量为max的数组buckets,并且将buckets中的所有数据都初始化为0。
  8.  
  9.         for(int i =0; i < a.length; i++) // 1. 计数
  10.             buckets[a[i]]++;
  11.        
  12.         for(int i =0, j =0; i < max; i++)  // 2. 排序
  13.         {
  14.             while((buckets[i]--)> 0)
  15.                 a[j++]= i;
  16.         }
  17.  
  18.         buckets = null;
  19. }
 
 
基数排序
  1. /*
  2. * 获取数组a中最大值
  3. * 参数说明:a -- 数组 n -- 数组长度
  4. */
  5. int get_max(int a[],int n)
  6. {
  7.     int i, max;
  8.  
  9.     max = a[0];
  10.     for(i =1; i < n; i++)
  11.         if(a[i]> max)
  12.             max = a[i];
  13.     return max;
  14. }
  15.  
  16. /*
  17. * 对数组按照"某个位数"进行排序(桶排序)
  18. *
  19. * 参数说明:
  20.  *     a -- 数组
  21.  *     n -- 数组长度
  22.  *     exp -- 指数。对数组a按照该指数进行排序。
  23. *
  24. * 例如,对于数组a={50, 3, 542, 745, 2014, 154, 63, 616};
  25.  *    (01) 当exp=1表示按照"个位"对数组a进行排序
  26.  *    (02) 当exp=10表示按照"十位"对数组a进行排序
  27.  *    (03) 当exp=100表示按照"百位"对数组a进行排序
  28.  *    ...
  29. */
  30. void count_sort(int a[],int n,int exp)
  31. {
  32.     int output[n];             // 存储"被排序数据"的临时数组
  33.     int i, buckets[10]={0};
  34.  
  35.     for(i =0; i < n; i++) // 将数据出现的次数存储在buckets[]中
  36.         buckets[(a[i]/exp)%10]++;
  37.  
  38.     for(i =1; i <10; i++) // 更改buckets[i]。目的是让更改后的buckets[i]的值是该数据在output[]中的位置。
  39.         buckets[i]+= buckets[i -1];
  40.    
  41.     for(i = n -1; i >=0; i--) // 将数据存储到临时数组output[]中
  42.     {
  43.         output[buckets[(a[i]/exp)%10]-1]= a[i];
  44.         buckets[(a[i]/exp)%10]--;
  45.     }
  46.  
  47.     for(i =0; i < n; i++) // 将排序好的数据赋值给a[]
  48.         a[i]= output[i];
  49. }
  50.  
  51. /*
  52. * 基数排序
  53. * 参数说明:  a -- 数组 n -- 数组长度
  54. */
  55. void radix_sort(int a[],int n)
  56. {
  57.     int exp;    // 指数。当对数组按各位进行排序时,exp=1;按十位进行排序时,exp=10;...
  58.     int max = get_max(a, n);    // 数组a中的最大值
  59.  
  60.     for(exp =1; max/exp >0; exp *=10) // 从个位开始,对数组a按"指数"进行排序
  61.         count_sort(a, n, exp);
  62. }
 
 
 
 
 
 
 
 
 
 
 
 

桶排序与基数排序代码(JAVA)的更多相关文章

  1. 由Maximum Gap,对话桶排序,基数排序和统计排序

    一些非比较排序 在LeetCode中有个题目叫Maximum Gap.是求一个非排序的正数数列中按顺序排列后的最大间隔.这个题用桶排序和基数排序都能够实现.以下说一下桶排序.基数排序和计数排序这三种非 ...

  2. Java实现桶排序和基数排序

    桶排序代码: import java.util.Arrays; /** * 桶排序 * 工作的原理是将数组分到有限数量的桶里 * 每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序 ...

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

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

  4. Python线性时间排序——桶排序、基数排序与计数排序

    1. 桶排序 1.1 范围为1-M的桶排序 如果有一个数组A,包含N个整数,值从1到M,我们可以得到一种非常快速的排序,桶排序(bucket sort).留置一个数组S,里面含有M个桶,初始化为0.然 ...

  5. java-数组排序--计数排序、桶排序、基数排序

    计数排序引入 不难发现不论是冒泡排序还是插入排序,其排序方法都是通过对每一个数进行两两比较进行排序的,这种方法称为比较排序,实际上对每个数的两两比较严重影响了其效率,理论上比较排序时间复杂度的最低下限 ...

  6. 排序算法-基数排序(Java)

    package com.rao.sort; import java.util.*; /** * @author Srao * @className RadioSort * @date 2019/12/ ...

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

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

  8. JavaScript 数据结构与算法之美 - 桶排序、计数排序、基数排序

    1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...

  9. 记数排序 & 桶排序 & 基数排序

    为什么要写这样滴一篇博客捏...因为一个新初一问了一道水题,结果就莫名其妙引起了战斗. 然后突然发现之前理解的桶排序并不是真正的桶排序,所以写一篇来区别下这三个十分相似的排序辣. 老年菜兔的觉醒!!! ...

随机推荐

  1. 安卓开发入门之activity

    安卓开发主要用到的是java语言,对于一个activity,自己写的程序可以继承至Activity,该Activity先会运行一个叫 onCreat()的类,可以在其中申明一些初始化的函数等,这个函数 ...

  2. Hibernate 性能优化之二级缓存

    二级缓存是一个共享缓存,在二级缓存中存放的数据是共享数据特性     修改不能特别频繁     数据可以公开二级缓存在sessionFactory中,因为sessionFactory本身是线程安全,所 ...

  3. python正则表达式入门

    基本概念 使用正则表达式需要import re 表达式前加r避免转义 \d代表数字,\s代表空白字符,\w代表字母+数字. .代表任意单个字符 {m,n}代表前面字符至少出现m次,最多出现n次. (x ...

  4. 利用js加载本地图片预览功能

    直接上代码: 经测试,除safari6包括6以下不支持,其他均可正常显示. 原因:safari6不支持filereader,同时不能使用IE滤镜导致失效. fix: 可以利用canvas,解决safa ...

  5. nodejs 初学笔记

    首先到nodejs的官网安装nodejs,地址nodejs.org,网站第一页会根据你的电脑系统推荐你适合的版本,下载,不断next,在cmd中输入 node -v 可以看到版本的话,即安装成功. 说 ...

  6. $_CFG = load_config(); /* 载入系统参数 */

    ecshop 中$_CFG数组主要是放置一些系统参数,并且全站共享的数据,在使用的时候,ecshop里面常常以$GLOBALS['_CFG']全局变量的模式来处理. ecshop 的$GLOBALS[ ...

  7. MySql存储过程—2、第一个MySql存储过程的建立

    看看如何创建一个存储过程.虽然通过命令行可以创建,但基本通过MySQL提供的Query browser来创建. 1.首先我们通过Administrator在test数据库中创建一个简单的表名叫”pro ...

  8. 关于function与closure

    function 方式 scope function closure expression anonymous function class(this, prototype)

  9. Delphi 缩放图像代码 - 支持PNG透明通道(利用了Windows的windowscodecs.dll)

    要求Delphi2007或者更高版本, 系统要求至少XP-SP2以上 实际上是利用了Windows的windowscodecs.dll这个文件的功能 在VCL里已经封装为TWICImage类 proc ...

  10. 多备份CEO胡茂华:创业路上的五道坎

    本文由多备份CEO胡茂华记述,授权南七道发表,未做删改.胡茂华:腾讯第116号员工,历任腾讯总监.盛大CTO (旅游).1号店技术副总裁.现担任云服务提供商多备份联合创始人&CEO. 2014 ...