博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
8.基数排序
阅读量:4348 次
发布时间:2019-06-07

本文共 1591 字,大约阅读时间需要 5 分钟。

#include 
#include
#include
using namespace std; int bits(int t){ int ret = 0; while(t >= 10) { ret++; t /= 10; } return ret + 1;}int find_p(int n, int j){ return (n / (int)pow(10, j - 1)) - (n / (int)pow(10, j)) * 10;}bool Radix_sort(int *a, int n, int k){ int bit = bits(k), *b = new int [n]; int counter[10]; for(int j = 1; j <= bit; j++) { memset(counter, 0, sizeof(counter)); for(int i = 0; i < n; i++) counter[find_p(a[i], j)]++; for(int i = 1; i < 10; i++) counter[i] += counter[i - 1]; for(int i = n - 1; i >= 0; i--) b[counter[find_p(a[i], j)]-- - 1] = a[i]; for(int i = 0; i < n; i++) a[i] = b[i]; } return true;}int main(){ int n; cin >> n; int *num = new int[n]; int *k = &num[0]; for(int i = 0; i < n; i++) { cin >> num[i]; if(*k <= num[i]) k = &num[i]; } Radix_sort(num, n, *k); for(int i = 0; i < n; i++) cout << num[i] << " "; cout << endl;}

想这个算法的时候,原本想通过二进制来排序(二进制的某位的数字比较容易get: x & 1 << i 即可), 但这样子的话需要循环30次(假设为int类型), 虽说影响不大但每次的移动次数过多,效率上反而可能不如用其他进制了(大致的估计, 并没推导过)。 排序部分只要时一种稳定排序即可, 计数排序反而成了比较好的选择(计数排序容易MLE的弊端在基数排序中得到了屏蔽)。并且计数排序为非比较性排序,效率上比其他比较排序高了很多。

算法的时间复杂度: O(bits*(n + 10)) = O(bits * n) = O(n) (Exc Me???) : 解释:bits为数在进制下的位数, 10是指10进制

 

代码缺陷:

  a.为节省内存用了new造成代码比较凌乱

  b.总感觉find_p() 在调用或者内部上有些啰嗦, 应当可以省略

  c.代码的关键部分连着三个 ‘-’ 很奇葩啊有没有....

转载于:https://www.cnblogs.com/QQ-1615160629/p/5858428.html

你可能感兴趣的文章
python的字符串内建函数
查看>>
Spring - DI
查看>>
微软自己的官网介绍 SSL 参数相关
查看>>
Composite UI Application Block (CAB) 概念和术语
查看>>
ajax跨域,携带cookie
查看>>
阶段3 2.Spring_02.程序间耦合_7 分析工厂模式中的问题并改造
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_2 spring中的Ioc前期准备
查看>>
阶段3 2.Spring_02.程序间耦合_8 工厂模式解耦的升级版
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_6 spring中bean的细节之三种创建Bean对象的方式
查看>>
阶段3 2.Spring_04.Spring的常用注解_2 常用IOC注解按照作用分类
查看>>
阶段3 2.Spring_09.JdbcTemplate的基本使用_5 JdbcTemplate在spring的ioc中使用
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_02.ssm整合之搭建环境
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_3、快速创建SpringBoot应用之手工创建web应用...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_9、SpringBoot基础HTTP其他提交方法请求实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第5节 SpringBoot部署war项目到tomcat9和启动原理讲解_23、SpringBoot2.x启动原理概述...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_32..SpringBoot2.x持久化数据方式介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_35、事务介绍和常见的隔离级别,传播行为...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第14节 高级篇幅之SpringBoot多环境配置_59、SpringBoot多环境配置介绍和项目实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_43、SpringBoot2.x异步任务实战(核心知识)...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介
查看>>