Java实现桶排序和基数排序】的更多相关文章

桶排序代码: import java.util.Arrays; /** * 桶排序 * 工作的原理是将数组分到有限数量的桶里 * 每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序) * 桶排序是鸽巢排序的一种归纳结果.当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间O(N) * 但桶排序并不是比较排序,它不受到O(n log n) 下限的影响 * * 时间复杂度: O(N+C),其中C=N*(logN-logM)<br /> * 空间复杂度:N+M,M…
一些非比较排序 在LeetCode中有个题目叫Maximum Gap.是求一个非排序的正数数列中按顺序排列后的最大间隔.这个题用桶排序和基数排序都能够实现.以下说一下桶排序.基数排序和计数排序这三种非比較排序. 桶排序 这样的排序的主要思想是.把数列分配到多个桶中,然后再在各个桶中使用排序算法进行排序.当然也能够继续使用桶排序. 如果数组的最大值是A,最小值是B,长度是L,则每一个桶的大小能够是S=Max(1,(A-B)/(L-1))则能够分为(A-B)/S+1个桶. 对于数列中的数字x.用(x…
转载请注明原文地址: http://www.cnblogs.com/ygj0930/p/6639353.html  比较和非比较排序 快速排序.归并排序.堆排序.冒泡排序等比较排序,每个数都必须和其他数进行比较,才能确定自己的位置.冒泡排序之类的排序,问题规模为n,又因为需要比较n次,所以平均时间复杂度为O(n²). 归并排序.快速排序之类的排序,问题规模通过分治法削减为logN次,所以时间复杂度平均O(nlogn).比较排序适用于各种规模的数据,也不在乎数据的分布,都能进行排序,适用于一切需要…
  桶排序 publicstaticvoid bucketSort(int[] a,int max){         int[] buckets;           if(a==null || max<1)             return;           buckets =newint[max]; // 创建一个容量为max的数组buckets,并且将buckets中的所有数据都初始化为0.           for(int i =0; i < a.length; i++)…
1. 桶排序 1.1 范围为1-M的桶排序 如果有一个数组A,包含N个整数,值从1到M,我们可以得到一种非常快速的排序,桶排序(bucket sort).留置一个数组S,里面含有M个桶,初始化为0.然后遍历数组A,读入Ai时,S[Ai]增一.所有输入被读进后,扫描数组S得出排好序的表.该算法时间花费O(M+N),空间上不能原地排序. 初始化序列S 遍历A修改序列S的项 举个例子,排序一个数组[5,3,6,1,2,7,5,10] 值都在1-10之间,建立10个桶: [0 0 0 0 0 0 0 0…
计数排序引入 不难发现不论是冒泡排序还是插入排序,其排序方法都是通过对每一个数进行两两比较进行排序的,这种方法称为比较排序,实际上对每个数的两两比较严重影响了其效率,理论上比较排序时间复杂度的最低下限为nlog(n),即任何比较排序的时间复杂度将不会低于nlog(n),那么有没有方法能不经过数列比较就能使数列排序呢 ,她们的时间复杂度又是多少呢??? 计数排序就是一个非比较排序的算法,一如鱼与熊掌不可兼得,她使用了牺牲空间换时间的方法,使的时间复杂度可以达到Ο(n+k) 假设我们有一个数列arr…
1.桶排序: 百度百科:桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里.每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序).桶排序是鸽巢排序的一种归纳结果.当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n)).但桶排序并不是 比较排序,他不受到 O(n log n) 下限的影响. 代码实现如下: package Combat.com; import java.util.Arrays; i…
桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里.每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序).桶排序是鸽巢排序的一种归纳结果.当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间((大O符号)).但桶排序并不是比较排序,他不受到下限的影响. 桶排序以下列程序进行: 设置一个定量的数组当作空桶子. 寻访序列,并且把项目一个一个放到对应的桶子去. 对每个不是空的桶子进行排序. 从不是空的桶子里把项目再放…
public class BucketSort { public static void main(String[] args) { int[] list = {1000, 192, 221, 12, 23}; print(list); System.out.println(); bucketSort(list, 10, 4); print(list); } //list:待排序数组 radix关键字取值范围 d一个数最多包含的关键字 public static void bucketSort(…
为什么要写这样滴一篇博客捏...因为一个新初一问了一道水题,结果就莫名其妙引起了战斗. 然后突然发现之前理解的桶排序并不是真正的桶排序,所以写一篇来区别下这三个十分相似的排序辣. 老年菜兔的觉醒!!! 记数排序 记数排序是一种很快的排序算法,但是要很多的空间. 具体的操作: 比如说给一个这样的数列:    6 9 3 2 3 5 我萌需要一个数组   a[i] 表示 数列中 数值为 i 的有多少个 这样 就可以 O(n) 处理出这个数组 read(x); a[x]++; 比如辣个栗子的a数组是这…