5.2 计数排序
来源:互联网 发布:vscode 修改字体颜色 编辑:程序博客网 时间:2024/06/11 09:42
前提假设: 假设输入的待排序的n个元素中的每一个值都在0到k区间中的一个整数(k为某个整数)。
基本思想: 对于每一个输入元素x,统计小于x的元素个数,确定x元素在输出数组中的位置。例如,如果有17个元素小于x,则x就应该放在输出数组的第18个位置。当有元素相等时,这个情况另外在讨论。
时间复杂度: O(k+n),当k=O(n)时,该算法的时间复杂度为O(n)。此时,我们会用计数算法。
算法特点: 该算法是稳定的;对于相同的两个数来说,在输入数组中先出现的数,在输出数组中也先出现。
java实现:
/*** * 计数排序 * @param A 待排序的数组 * @param B 结果数组 * @param k 数组A中的所有元素都在0到k区间的一个整数 */ public static void countingSort(int[] A,int[] B,int k){ //提供临时存储空间,用来统计值等于A[j]的元素的个数 int[] C=new int[k]; for (int i = 0; i < k; i++) { C[i]=0; } for (int i : A) { C[i]++; //统计值等于A[i]的元素的个数 } //统计小于等于i的元素的个数 for (int i = 1; i <= k; i++) { C[i]=C[i]+C[i-1]; } //把每个A[i]放在输出数组B的正确位置 //对于每个A[i]来说,C[A[i]]就是A[i]在输出数组中的位置 for (int i = A.length-1; i >= 0; i--) { B[C[A[i]]-1]=A[i]; //当下一个值等于A[i]的元素,可以直接放在输出数组中A[i]的前一个位置 C[A[i]]--; } }
0 0
- 5.2 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- 计数排序
- iOS小技巧 - 判断设备版本
- linux解压缩命令tar
- iOS下Category添加属性字段
- 【华为机试题】和尚挑水
- iptables学习day-02
- 5.2 计数排序
- 基于netbean使用javamail的发送邮件的教程
- HttpClient 和 HttpURLConnection两种请求方式的写法
- js常用功能汇总
- POJ-1850 Code
- iOS自定义searchBar
- JS中对象与字符串的互相转换
- Android中Path类的使用
- go语言文件汇总