桶排序
  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. Landsat元数据批量下载工具

    目录 前言 landsat数据情况简介 下载元数据 总结 一.前言        最近由于工作需要,需要下载部分landsat数据的元数据,老板大手一挥,给了十几年的landsat的path.row以 ...

  2. centos node卸载

    1.通过包管理工具 如果是通过包管理工具安装的话,那就和包管理工具卸载 yum remove nodejs npm -y 2.手动 如果是通过手动安装:官方下载后安装 进入到安装的路径 cd /opt ...

  3. 实时错误 '91' :对象变量或with块变量未设置

    大家这几天在做学生信息管理系统的时候,出现最多的应该就是这个问题了,“实时错误‘91’:对象变量或with块变量未设置”.如右图: 遇到这个问题,我们首先应该去参考MSDN,不过这时候MSDN似乎没有 ...

  4. WebAPI下的如何实现参数绑定

    本文将概述在WebAPI方式下将如何将参数绑定到一个action方法,包括参数是如何被读取,一系列规则决定特定环境采用的那种绑定方式,文章最后将给出一些实际的例子. Parameter binding ...

  5. 激活office 2013

    1.下载office 2013激活工具:microsoft toolkit 2.解压文件,运行Microsoft Toolkit.exe,选择office,即箭头标识处

  6. 【行为型】Iterator模式

    迭代器模式提供一种方法顺序访问聚合对象中的各个元素,而又不需要暴露该聚合对象的内部表示.对于该模式,估计几乎所有的人都使用过,在此直接给出类结构图参考如下: 如前所述,迭代器模式的思想主要是:一能提供 ...

  7. linux c信息验证程序(分享)

    程序来源是Hirst First c,程序很简单,但却是很好的说明了一个检测信息是否被串改的原理.下载程序的时候是否都有看到提供md5效验值的呢,原理其实和这个小程序相似:就是对程序的内容进行某种计算 ...

  8. 转:MFC之COleVariant

    COleVariant 本质上是一个枚举,用同一种类型来表达不同的子类型.如同boost中的variant. 例子 COleVariant var(3.6f); float v = var.fltVa ...

  9. linux下文件编码的查看与转换(转)

    通常来说,Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8,所以Linux下打开windows的文件会有乱码的情况.另外,有时要将文件进行编码转换,如将简体中文转 ...

  10. Extjs4 中在指定光标处插入值

    var rulearea = Ext.getCmp(文本域Id); var rulevalue = rulearea.getValue();// 获取文本textarea 里面的值 var start ...