计数排序

时间复杂度O(n)
特点:稳定
限制:对0到maximum中的数进行排序
maximum要求,比数组中最大值大或者相等
有拓展版本的计数排序(在文章基数排序内)
基数排序链接

void counting_sort(int *input_array,int *out_array,int length,int maximum)
{int* count_array = new int [maximum+1];for (int i = 0; i < maximum + 1; ++i) {count_array[i] = 0;}for (int i = 0; i < length; ++i) {count_array[input_array[i]] = count_array[input_array[i]] + 1;}for (int i = 1; i < maximum + 1; ++i) {count_array[i] = count_array[i] + count_array[i-1];}for (int i = length - 1; i >=0 ; i--) {out_array[count_array[input_array[i]]-1] = input_array[i];count_array[input_array[i]] = count_array[input_array[i]] - 1;}delete [] count_array;
}

拓展版本1⃣️
带Key版本,缺点只能对Key为非负数排序

void counting_sort(vector<KeyValuePair>& array,int key_maximum)
{int *count_array = new int[key_maximum + 1];for (int i = 0; i < key_maximum+1; ++i) {count_array[i] = 0;}for (int i = 0; i < array.size(); ++i) {count_array[array[i].key] = count_array[array[i].key]+1;}for (int i = 1; i < key_maximum+1; ++i) {count_array[i] = count_array[i] + count_array[i-1];}vector<KeyValuePair> temp_array(array.size());for (int i = array.size()-1; i >=0 ; --i) {temp_array[count_array[array[i].key]-1] = array[i];count_array[array[i].key] = count_array[array[i].key] - 1;}for (int i = 0; i < array.size(); ++i) {array[i] = temp_array[i];}delete [] count_array;
}

2⃣️优化版本,对任意正整数排序

void counting_sort_by_key(vector<KeyValuePair>& array,int key_minimum = - 9,int key_maximum = 9);
void counting_sort_by_key(vector<KeyValuePair>& array,int key_minimum,int key_maximum)
{int inverter_count = key_maximum - key_minimum + 1;int *count_array = new int[inverter_count];for (int i = 0; i < inverter_count; ++i) {count_array[i] = 0;}for (int i = 0; i < array.size(); ++i) {count_array[array[i].key - key_minimum] = count_array[array[i].key - key_minimum] + 1;}for (int i = 1; i < inverter_count; ++i) {count_array[i] = count_array[i] + count_array[i-1];}vector<KeyValuePair> temp_array(array.size());for (int i = array.size() - 1; i >=0 ; --i) {temp_array[count_array[array[i].key - key_minimum]-1] = array[i];count_array[array[i].key - key_minimum] = count_array[array[i].key - key_minimum] - 1;}for (int i = 0; i < array.size(); ++i) {array[i] = temp_array[i];}delete [] count_array;
}

辅助类:KeyValuePair
链接地址

算法-排序-计数排序(包含对非负数和整数的排序)相关推荐

  1. ACMNO.18 C语言-选择排序 用选择法对10个整数从小到大排序。 输入 10个整数 输出 排序好的10个整数

    题目描述 用选择法对10个整数从小到大排序. 输入 10个整数 输出 排序好的10个整数 样例输入 4 85 3 234 45 345 345 122 30 12 样例输出 3 4 12 30 45 ...

  2. C——用冒泡排序法、选择排序法对随机输入的10个整数从小到大排序

    //冒泡排序法 #include <stdio.h> int main() {int i,j,t,a[10];for(i=0;i<10;i++){scanf("%d&quo ...

  3. jooq 分页排序_将jOOQ与Spring结合使用:排序和分页

    jooq 分页排序 JOOQ是一个库,可以帮助我们控制SQL. 它可以从我们的数据库生成代码,并允许我们使用其流畅的API来构建类型安全的数据库查询. 本教程前面的部分向我们介绍了如何配置应用程序的应 ...

  4. 排序算法之计数排序、基数排序和桶排序

    转自:http://www.cnblogs.com/ttltry-air/archive/2012/08/04/2623302.html 计数排序,基数排序,桶排序等非比较排序算法,平均时间复杂度都是 ...

  5. C++使用Merge Sort排序计数反转的实现算法(附完整源码)

    C++使用Merge Sort排序计数反转的实现算法 C++使用Merge Sort排序计数反转的实现算法完整源码(定义,实现,main函数测试) C++使用Merge Sort排序计数反转的实现算法 ...

  6. java sorted排序_【算法】排序算法之计数排序

    前几回,我们已经对冒泡排序.直接插入排序.希尔排序.选择排序.快速排序.归并排序.堆排序做了说明分析.本回,将对计数排序进行相关说明分析. 一.排序算法系列目录说明 冒泡排序(Bubble Sort) ...

  7. 【排序算法】计数排序

    当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k).计数排序不是比较排序,排序的速度快于任何比较排序算法. 由于用来计数的数组B的长度取决于待排序数组中数据的范围(等于 ...

  8. 【算法学习】线性时间排序-计数排序、基数排序和桶排序详解与编程实现

    计数排序 计数排序假设n个输入元素中的每一个都是介于0到k之间的整数.此处k为某个整数(输入数据在一个小范围内). 算法思想 计数排序的基本思想是对每一个输入元素x,确定出小于x的元素的个数.然后再将 ...

  9. c++ 二维数组 排序_【算法】排序算法之计数排序

    前几回,我们已经对[算法]排序算法之冒泡排序.[算法]排序算法之插入排序.[算法]排序算法之希尔排序.[算法]排序算法之选择排序.[算法]排序算法之快速排序.[算法]排序算法之归并排序.[算法]排序算 ...

最新文章

  1. openssh升级sftp_CentOS6.5升级OpenSSH 8.3版本
  2. 帆软报表(finereport)图表钻取详细类别 当前页对话框展示
  3. Oracle解析XML 节点信息并转换String 类型
  4. character-level OCR之Character Region Awareness for Text Detection(CRAFT) 论文阅读
  5. 华为私密相册计算机找回密码,华为手机进入隐私空间的密码忘记了怎么办
  6. mysql操作基础知识
  7. html可以简写的属性,css有哪些缩写属性?
  8. 内网渗透之域内信息收集
  9. python之matplotlib 3.2.1之spines不显示右侧和顶端的坐标轴
  10. Sobel算子->方向滤波
  11. 滴滴为什么选择与章鱼哥APP合作?
  12. hdfs文件误删恢复
  13. 社保系列7《PSAM卡》
  14. quest3d q.LoadChannelGroupDQ的详解
  15. kube-prometheus-stack 部署
  16. 期货黄金交易平台重要吗?有哪些显著的期货黄金交易平台优势?
  17. RTD热电阻/TC热电偶
  18. 7N60-ASEMI高压MOS管7N60
  19. When YoloV5 Meets Raccoon:手把手用Yolov5(v4.0)制作一个小浣熊捕捉apk
  20. 我的C#第一次实验:中秋博饼

热门文章

  1. Andorid之bitmap里面的压缩总结
  2. strstr和strcchr查找字符串和区别
  3. Android怎么自定义listview布局,Android ListView自定义布局
  4. 颜宁课题组再发Cell!1个月时间内4篇顶刊!
  5. 快速入门人工智能,这波福利不能错过!
  6. 预售┃每个人都应该学习编程,因为它会教你如何思考
  7. mysql sleep详解_sql注入详解(二)
  8. python if elif else_python:通讯录(字典+while+if/else)
  9. c语言长整数转化为16进制字符串,一个30位的字符串十进制长整数怎么转换为对应的十六进制和八进制...
  10. php吞了throw错误,PHP 异常与错误处理