基数排序(radixSort)
桶排序:
就是把数据分组,放在一个个的桶中,然后对每个桶里面的在进行排序。
例如要对大小为[1..1000]范围内的n个整数A[1..n]排序
首先,可以把桶设为大小为10的范围,具体而言,设集合B[1]存储[1..10]的整数,集合B[2]存储   (10..20]的整数,……集合B[i]存储(   (i-1)*10,   i*10]的整数,i   =   1,2,..100。总共有  100个桶。
然后,对A[1..n]从头到尾扫描一遍,把每个A[i]放入对应的桶B[j]中。  再对这100个桶中每个桶里的数字排序,这时可用冒泡,选择,乃至快排,一般来说任  何排序法都可以。
最后,依次输出每个桶里面的数字,且每个桶中的数字从小到大输出,这  样就得到所有数字排好序的一个序列了。
八大排序算法之基数排序算法(JAVA)
基数排序:
计数排序:
假设有无序序列:[ 5, 8, 9, 1, 4, 2, 9, 3, 7, 1, 8, 6, 2, 3, 4, 0, 8 ]


如右图所示,计数排序就是构建一个足够大的数组,此数组保证能够将所有元素都包含在这个数组上。然后遍历数组给对应元素加1,最后一次输出。




基数排序:
是在计数排序过程之上的一种演化。分最高位优先MSD法,和最低位优先LSD法,两种。缺点是空间复杂度较高
例: T = [ 2314, 5428, 373, 2222, 17 ]

八大排序算法之基数排序算法(JAVA)
原数组 ------------------>> 对个位计数排序------------>> 对十位计数排序
八大排序算法之基数排序算法(JAVA)

八大排序算法之基数排序算法(JAVA)
对最高位计数排序 << ------------------ 对百位计数排序 <------

复杂度分析:
八大排序算法之基数排序算法(JAVA)
代码:

package com.sunMac.eightSort;

public class radixSort {
public static void main(String[] args) {
int []data={2314,5428,373,2222,17};
radixsort(data,5);
}
private static int maxbit(int data[], int n) //辅助函数,求数据的最大位数
{
int d = 1; //保存最大的位数
int p = 10;
for(int i = 0; i < n; ++i)
{
while(data[i] >= p)
{
p *= 10;
++d;
}
}
return d;
}
public static void radixsort(int data[], int n) //基数排序
{
int d = maxbit(data, n);
int []tmp = new int[n];
int []count = new int[10]; //计数器
int i, j, k;
int radix = 1; //用来统一被排序元素的当前位
for(i = 1; i <= d; i++) //进行d次排序
{
for(j = 0; j < 10; j++)
count[j] = 0; //每次分配前清空计数器
for(j = 0; j < n; j++)
{
k = (data[j] / radix) % 10; //统计每个桶中的记录数
count[k]++;
}
for(j = 1; j < 10; j++)
count[j] = count[j - 1] + count[j]; //将tmp中的位置依次分配给每个桶
for(j = n - 1; j >= 0; j--) //将所有桶中记录依次收集到tmp中
{
k = (data[j] / radix) % 10;
八大排序算法之基数排序算法(JAVA)
tmp[count[k] - 1] = data[j];
count[k]--;
}
for(j = 0; j < n; j++) //将临时数组的内容复制到data中
data[j] = tmp[j];
radix = radix * 10;
System.out.println("当前为第"+i+"排序");
for(int h=0;h<n;h++){
System.out.print("-->"+data[h]);
}
System.out.println();
}
}
}

相关文章:

  • 2021-05-08
  • 2021-09-04
  • 2021-06-13
  • 2021-06-01
  • 2021-12-17
  • 2021-11-19
  • 2021-10-07
  • 2021-12-12
猜你喜欢
  • 2022-01-14
  • 2021-08-13
  • 2021-03-29
  • 2021-09-19
  • 2021-09-18
  • 2022-01-12
  • 2021-07-26
相关资源
相似解决方案