排序算法总结(8)--计数排序
来源:互联网 发布:js 获取手机版本号 编辑:程序博客网 时间:2024/06/06 01:08
一、简介
之前介绍的排序算法都是比较排序算法,时间复杂度最小为O(nlgn)。计数排序不需要元素之间的比较。前提条件是序列中的每一个元素都是0-k之间的一个整数。所谓计数,即统计每个元素出现的次数,然后对于每个元素x,确定小于x的元素的个数。利用这一信息,直接将x放在输出数组中正确的位置。
二、伪代码
countSort(A,B,k)//A是待排序数组,B存储排序后数组,k>=A中最大值 初始化一个长度为k+1的数组C,每个元素为零 //统计每个元素的个数 for i=0 to A.length-1 C[A[i]]=C[A[i]]++ //对每个元素想,计算比x的元素的个数 for j=1 to k C[i]=C[i]+C[i-1] //对元素x,根据比x小的元素的个数,将元素归位 for i=A.length-1 to 0 B[C[A[j]]]=A[j] C[A[j]]--
三、代码实现
public static void countsort(int[] input, int[] output, int k) { int[] c = new int[k+1]; for (int i = 0; i < input.length; i++) { c[input[i]]++; } for (int i = 1; i < k+1; i++) { c[i] = c[i] + c[i - 1]; } for (int i = input.length - 1; i >= 0; i--) { output[c[input[i]] - 1] = input[i]; c[input[i]]--; } }
四、注意事项
1、计数排序不需要比较元素,但是对待排序的序列有一定的要求,序列中的每一个元素都是0-k之间的一个整数。
2、计数排序不属于比较排序的范围,所以其时间复杂度可以打破比较排序的下界,总的时间代价为O(k+n)。在实践中,令k=O(n),时间复杂度为O(n)。
3、计数排序是稳定的。(假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。)
阅读全文
0 0
- 排序算法总结(8)--计数排序
- 排序算法总结(一)计数排序
- 算法排序2-计数排序总结
- 排序算法:计数排序
- 排序算法-计数排序
- 【排序算法】计数排序
- 【排序算法】:计数排序
- 算法与数据结构-常用排序算法总结2-计数排序
- 排序算法总结之计数排序 Counting Sort
- 常用排序算法总结9一一计数排序
- 排序算法3---计数排序
- 排序算法之计数排序
- 排序算法之计数排序
- 排序算法 - 计数排序(C++)
- 排序算法之计数排序
- 排序算法之计数排序
- 排序算法之计数排序
- 排序算法_计数排序
- FastDFS分布式文件系统集群安装与配置
- PyCharm下如何固定模板
- U盘被写保护或无法写数据无法格式化的问题解决
- Object-C中的Block
- Linux及Arm-Linux程序开发笔记(零基础入门篇)
- 排序算法总结(8)--计数排序
- tensorflow windows安装
- UML基础
- java开发之线程(守护线程daemon和用户线程User Thread)
- HttpClient4.5.2 使用cookie保持会话——获取cookie之后如何传递它
- android studio gradle入门
- Vue.js 学习(8) -- v-model: 表单控件绑定
- TensorFlow 1.0 中改变的API集合
- String、StringBuffer与StringBuilder的区别--Java基础060