码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 排序算法-基数排序法(RadixSort)


    排序算法-基数排序法(RadixSort)

    1、说明

    基数排序法与我们之前讨论的排序法不太一样,并不需要进行元素之间的比较操作,而是属于一种分配模式排序方式。

    基数排序法比较的方向可分为最高位优先(Most Significant Digit First,MSD)和最低位优先(Least Significant Digit First,LSD)两种。MSD是从最左边的位数开始比较的,而LSD则是从最右边的位数开始比较的。

    2、算法分析

    1. 在所有情况下,时间复杂度均为O(n{log_{p}}^{k}),k是原始数据的最大值。
    2. 基数排序法是稳定排序法。
    3. 基数排序法要使用很大的额外空间来存放列表数据,其空间复杂度为O(n*p),n是原始数据的个数,p是数据字符数。
    4. 若n很大,p固定或很小,则此排序法的效率很高。

    3、C++代码 

    1. #include
    2. #include
    3. using namespace std;
    4. void PrintData(int data[], int size) {
    5. for (int i = 0; i < size; i++) {
    6. cout << data[i] << " ";
    7. }
    8. cout << endl;
    9. }
    10. void SetData(int data[], int size) {
    11. srand(time(nullptr));
    12. for (int i = 0; i < size; i++) {
    13. data[i] = rand() % 999 + 1;
    14. }
    15. }
    16. void Radix(int data[], int size) {
    17. for (int n = 1; n <= 100; n *= 10) {
    18. int temp[10][100] = { 0 };
    19. for (int i = 0; i < size; i++) {
    20. int m = (data[i] / n) % 10;
    21. temp[m][i] = data[i];
    22. }
    23. int k = 0;
    24. for (int i = 0; i < 10; i++) {
    25. for (int j = 0; j < size; j++) {
    26. if (temp[i][j] != 0) {
    27. data[k] = temp[i][j];
    28. k++;
    29. }
    30. }
    31. }
    32. cout << "经过" << setw(3) << n << "位排序后:";
    33. PrintData(data, size);
    34. }
    35. }
    36. int main() {
    37. int size = 20;
    38. int* data = new int[size];
    39. SetData(data, size);
    40. cout << "原始数据:";
    41. PrintData(data, size);
    42. cout << "---------------------------------" << endl;
    43. Radix(data, size);
    44. cout << "---------------------------------" << endl;
    45. cout << "最终数据:";
    46. PrintData(data, size);
    47. return 0;
    48. }

    输出结果 

  • 相关阅读:
    【性能测试】JMeter:集合点,同步定时器的应用实例!
    WPF 控件专题 DockPanel 控件详解
    【运维】dockerfile 中的COPY 会覆盖文件夹吗
    基因组学重点整理
    如何使用ZIP方式安装MySQL:简单、快速、高效的安装方法
    JAVA计算机毕业设计资源循环利用Mybatis+源码+数据库+lw文档+系统+调试部署
    <源码探秘CPython>-读懂Python解释器必须要会的C语言知识
    Golang复习
    Audacity 使用教程:轻松录制、编辑音频
    【172】SpringBoot2的一个利用CountDownLatch和线程池优化查询接口执行效率的例子
  • 原文地址:https://blog.csdn.net/qq_40660998/article/details/133849868
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号