网站首页 > 精选教程 正文
1、概念
计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。
计数排序(Counting sort)是一种稳定的排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。它只能对整数进行排序。
2、基本思想
- 找出待排序的数组中最大和最小的元素;
- 统计数组中每个值为i的元素出现的次数,存入数组C的第i项;
- 对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加);
- 反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1。
3、代码实现
public void countingsort(int[] array, int[] b, int k)
{
//创建数组c
int[] c = new int[k+1];
for(int i=0;i<c.length;i++)
{
c[i] = 0;
}
//统计数组array中每个元素出现的次数
for(int i=0;i<array.length;i++)
{
c[array[i]]++;
}
/**
* 统计数组中小于等于某一个数的的个数
* 因为小于等于0的数的个数就是等于0的个数,所以迭代从1开始
*/
for(int i=1;i<c.length;i++)
{
c[i] =c[i] + c[i-1];
}
for(int i=0;i<array.length;i++)
{
/**
*
*/
b[c[array[i]] - 1] = array[i];
/**
*
*/
c[array[i]]--;
}
}
public static void main(String[] args) {
int[] array =new int[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
int[] b = new int[10];
new Counting().countingsort(array,b,50);//其中55为数组中最大的元素值
for(int i=0;i<b.length;i++)
{
System.out.print(b[i]+" ");
}
}
- 上一篇: Java集合类面试高频问题全解析
- 下一篇: 互联网大厂开发必知:Java 实现排序算法全解析
猜你喜欢
- 2025-04-26 图解 SQL 执行顺序,三连暴击
- 2025-04-26 十大排序算法时空复杂度
- 2025-04-26 java实现10种排序算法
- 2025-04-26 java实现冒泡排序
- 2025-04-26 10 个经典的 Java 集合面试题,看你能否答得上来?
- 2025-04-26 Java面试中常被问到的集合类深度解读
- 2025-04-26 Java ArrayList基本操作及高级用法
- 2025-04-26 使用组合、排列和产品进行彻底的 JUNIT5测试
- 2025-04-26 Redis 源码简洁剖析 - Sorted Set 有序集合
- 2025-04-26 常见的三种排序(冒泡排序、插入排序、选择排序)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)