排序算法——基数排序
基数排序
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]);}
}
排序算法——基数排序相关推荐
- ef 排序string转int_Java排序算法——基数排序(Radix Sort)
基数排序 基数排序是非比较的排序算法,对每一位进行排序,从最低位开始排序,复杂度为O(kn),为数组长度,k为数组中的数的最大的位数: 基数排序是按照低位先排序,然后收集:再按照高位排序,然后再收集: ...
- C语言实现常用排序算法——基数排序
#include<stdio.h> #include<math.h> #define SIZE 10 #define C_SIZE 20/*行数稳定=10,切记!列数务必搞的大 ...
- [经典排序算法][集锦]
经典排序算法 经典排序算法,以下文章参考了大量网上的资料,大部分都给出了出处 这一系列重点在理解,所以例子什么的都是最简单的情况,难免失误之处,多指教 大多数排序算法都给出了每一步的状态,以方便初学者 ...
- 八种常用的排序算法(转)
下面要讲到的8种排序都属于内部排序,既在内存中完成,主要从理论原理方面来分析的. 插入排序 ①直接插入排序 例:六个数12 15 9 20 6 31 24 用直接插入排序,如下图: 思路: 第 ...
- 内部排序算法全面总结
排序的概念 排序,就是重新排列表中的元素,使表中的元素按照关键字有序的过程. 我所了解的 表 多半是顺序表,因为顺序表实现较为简单,但是链表结构同样可以实现很多排序算法. 定义中的元素一般指什么元素呢 ...
- 17种编程语言+10种排序算法
开源地址 https://gitee.com/lblbc/simple-works/tree/master/sort 覆盖语言:C.C++.C#.Java.Kotlin.Dart.Go.JavaScr ...
- 十大经典排序算法-桶排序算法详解
十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...
- 常用的排序算法的时间复杂度以及稳定性
排序算法分为一般排序和高级排序,高级排序算法往往效率超高,除此之外,排序算法的稳定性也是可参考的一个指标之一. 一般排序算法 一.冒泡排序 算法代码实现 #include "stdio.h& ...
- 十大经典排序算法-快速排序算法详解
十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...
最新文章
- java 关键字(面试题)
- Linux系统中创建虚拟环境详解
- python的windows出现问题_Windows下使用python库 curses遇到错误消息的解决方案
- Android adb你真的会用吗?
- centos系统下安装python3以及pip3
- Tomcat版本与Servlet、JSP等版本的支持关系
- android手机用户,[信息图]Android手机用户如何使用自己的设备?
- 澳门大学物联网设计方法研究获“973”立项
- java el 函数_javaweb基础(30)_EL函数库
- weblogic8.1在myeclipse中启动正常,在单独的weblogic中无法正常启动的解决方案.
- Delphi FastReport 小结
- C++精确到小数点后两位取值
- 机器学习介绍(李宏毅老师)
- 手把手教你申请计算机软件著作权(5)——— 信息补充(必看)
- 面向对象的6大原则与3大特性
- Hologres 助力飞猪双11实时数据大屏秒级响应
- http协议之http响应
- Yahoo军规14条
- oracle 创建表空间
- 模拟电路--一种电荷放大器的设计
热门文章
- Boost正则表达式的编译与使用方法集
- 解决安装kali 2020.1版本后的中文乱码问题:只需要安装中文字体(而不需要像之前版本那样需要选择locales和编码)。
- 2修改字段名_DevExpress ASP.NET v18.2新功能详解(二)
- iOS之深入解析依赖注入的原理与应用
- iOS开发常用的资源和资料
- 机器人写诗项目——数据预处理
- 2015年第六届蓝桥杯C/C++ A组国赛 —— 第三题:显示二叉树
- 征战蓝桥 —— 2014年第五届 —— C/C++A组第8题——地宫取宝
- 计算机视觉之OpenCV教程 ---Mat类基础(一)
- Windows下编程需要看哪些书