基数排序

1.基数排序的思想

  • 针对于有多个关键字的排序算法。先按照一个关键字进行排序,完成后在按另一个关键字排序。先按照权重小关键字排序,在按照权重大的关键字排序。
  • 按照每个关键字的值的范围,定义上相同数量的队列。对于数字我们先按照个位进行排序,然后在按照十位排。

2.基数排序的实现

// 获取最大数据的位数
int GetDigit(int *arr, int len)
{int max = arr[0];for (int i = 0; i < len; ++i){if (max < arr[i]) max = arr[i];}int digit = 0;while (max) // max 1234 123 12 1 0{digit++;max /= 10;}return digit;
}// 时间复杂度: O(d*n)
// 空间复杂度: O(n)
// 稳定性: 稳定
// 获取一个数据相应位数上的值
int GetRadix(int val, int digit)
{// val 1234int radix = val % 10; // 4while (digit){val /= 10; // 123radix = val % 10; // 3digit--;}return radix;
}void RadixSort(int *arr, int len)
{int maxDigit = GetDigit(arr, len);ListQue que[10];for (int i = 0; i < 10; ++i){InitListQue(&que[i]);}// 根据不同的位数,处理整个数据for (int i = 0; i < maxDigit; ++i){// 将arr中的所有数据取其i这个位数的值, 并且插入到相应值的队列中for (int j = 0; j < len; ++j){int radix = GetRadix(arr[j], i);Push(&que[radix], arr[j]);}// 将所有队列按照从前到后的顺序把值全部出到arr中。int index = 0;for (int k = 0; k < 10; ++k){while (!Empty(&que[k])){GetHead(&que[k], &arr[index++]);Pop(&que[k]);}}}for (int i = 0; i < 10; ++i){DestroyListQue(&que[i]);}
}

排序算法——基数排序相关推荐

  1. ef 排序string转int_Java排序算法——基数排序(Radix Sort)

    基数排序 基数排序是非比较的排序算法,对每一位进行排序,从最低位开始排序,复杂度为O(kn),为数组长度,k为数组中的数的最大的位数: 基数排序是按照低位先排序,然后收集:再按照高位排序,然后再收集: ...

  2. C语言实现常用排序算法——基数排序

    #include<stdio.h> #include<math.h> #define SIZE 10 #define C_SIZE 20/*行数稳定=10,切记!列数务必搞的大 ...

  3. [经典排序算法][集锦]

    经典排序算法 经典排序算法,以下文章参考了大量网上的资料,大部分都给出了出处 这一系列重点在理解,所以例子什么的都是最简单的情况,难免失误之处,多指教 大多数排序算法都给出了每一步的状态,以方便初学者 ...

  4. 八种常用的排序算法(转)

    下面要讲到的8种排序都属于内部排序,既在内存中完成,主要从理论原理方面来分析的.    插入排序 ①直接插入排序 例:六个数12 15 9 20  6 31 24 用直接插入排序,如下图: 思路: 第 ...

  5. 内部排序算法全面总结

    排序的概念 排序,就是重新排列表中的元素,使表中的元素按照关键字有序的过程. 我所了解的 表 多半是顺序表,因为顺序表实现较为简单,但是链表结构同样可以实现很多排序算法. 定义中的元素一般指什么元素呢 ...

  6. 17种编程语言+10种排序算法

    开源地址 https://gitee.com/lblbc/simple-works/tree/master/sort 覆盖语言:C.C++.C#.Java.Kotlin.Dart.Go.JavaScr ...

  7. 十大经典排序算法-桶排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  8. 常用的排序算法的时间复杂度以及稳定性

    排序算法分为一般排序和高级排序,高级排序算法往往效率超高,除此之外,排序算法的稳定性也是可参考的一个指标之一. 一般排序算法 一.冒泡排序 算法代码实现 #include "stdio.h& ...

  9. 十大经典排序算法-快速排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

最新文章

  1. java 关键字(面试题)
  2. Linux系统中创建虚拟环境详解
  3. python的windows出现问题_Windows下使用python库 curses遇到错误消息的解决方案
  4. Android adb你真的会用吗?
  5. centos系统下安装python3以及pip3
  6. Tomcat版本与Servlet、JSP等版本的支持关系
  7. android手机用户,[信息图]Android手机用户如何使用自己的设备?
  8. 澳门大学物联网设计方法研究获“973”立项
  9. java el 函数_javaweb基础(30)_EL函数库
  10. weblogic8.1在myeclipse中启动正常,在单独的weblogic中无法正常启动的解决方案.
  11. Delphi FastReport 小结
  12. C++精确到小数点后两位取值
  13. 机器学习介绍(李宏毅老师)
  14. 手把手教你申请计算机软件著作权(5)——— 信息补充(必看)
  15. 面向对象的6大原则与3大特性
  16. Hologres 助力飞猪双11实时数据大屏秒级响应
  17. http协议之http响应
  18. Yahoo军规14条
  19. oracle 创建表空间
  20. 模拟电路--一种电荷放大器的设计

热门文章

  1. Boost正则表达式的编译与使用方法集
  2. 解决安装kali 2020.1版本后的中文乱码问题:只需要安装中文字体(而不需要像之前版本那样需要选择locales和编码)。
  3. 2修改字段名_DevExpress ASP.NET v18.2新功能详解(二)
  4. iOS之深入解析依赖注入的原理与应用
  5. iOS开发常用的资源和资料
  6. 机器人写诗项目——数据预处理
  7. 2015年第六届蓝桥杯C/C++ A组国赛 —— 第三题:显示二叉树
  8. 征战蓝桥 —— 2014年第五届 —— C/C++A组第8题——地宫取宝
  9. 计算机视觉之OpenCV教程 ---Mat类基础(一)
  10. Windows下编程需要看哪些书