当前位置: 首页 > news >正文

排序算法-基数排序法(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++代码 

#include<iostream>
#include<iomanip>
using namespace std;void PrintData(int data[], int size) {for (int i = 0; i < size; i++) {cout << data[i] << " ";}cout << endl;
}void SetData(int data[], int size) {srand(time(nullptr));for (int i = 0; i < size; i++) {data[i] = rand() % 999 + 1;}
}void Radix(int data[], int size) {for (int n = 1; n <= 100; n *= 10) {int temp[10][100] = { 0 };for (int i = 0; i < size; i++) {int m = (data[i] / n) % 10;temp[m][i] = data[i];}int k = 0;for (int i = 0; i < 10; i++) {for (int j = 0; j < size; j++) {if (temp[i][j] != 0) {data[k] = temp[i][j];k++;}}}cout << "经过" << setw(3) << n << "位排序后:";PrintData(data, size);}
}int main() {int size = 20;int* data = new int[size];SetData(data, size);cout << "原始数据:";PrintData(data, size);cout << "---------------------------------" << endl;Radix(data, size);cout << "---------------------------------" << endl;cout << "最终数据:";PrintData(data, size);return 0;
}

输出结果 

http://www.lryc.cn/news/194291.html

相关文章:

  • nginx绑定tomcat与tomcat联合使用的配置(nginx反向代理tomcat的配置说明)
  • 【Java】nextInt()后面紧接nextLine()读取不到数据/InputMismatchException异常的解决方案
  • 【传输层协议】UDP/TCP结构特点与原理(详解)
  • 哪种网站适合物理服务器
  • uni-app集成使用SQLite
  • Qt不能安装自己想要的版本,如Qt 5.15.2
  • 学信息系统项目管理师第4版系列28_组织级项目管理和量化项目管理
  • Bean实例化的三级缓存
  • Jenkins+Gitlab+Docker(Dockerfile)部署
  • Web前端-Vue2+Vue3基础入门到实战项目-Day4(组件的三大组成部分, 组件通信, 案例-组件版小黑记事本, 进阶语法)
  • 【大模型应用开发教程】01_大模型简介
  • Flume 简介及基本使用
  • 行业追踪,2023-10-11
  • Linux:进程控制
  • HTTP中的GET方法与POST方法
  • 2023年10月16日-10月22日,(光追+ue+osg继续按部就班进行即可。)
  • 【Docker】命令使用大全
  • 查找算法:二分查找、插值查找、斐波那契查找
  • python+django高校教室资源预约管理系统lqg8u
  • Potato靶机
  • 【环境搭建】linux docker-compose安装gitlab和redis
  • JAVAEE初阶相关内容第十三弹--文件操作 IO
  • POI报表的高级应用
  • 【计算机毕设选题推荐】超市管理系统SpringBoot+SSM+Vue
  • 【算法1-4】递推与递归-P1002 [NOIP2002 普及组] 过河卒
  • 浅谈压力测试的作用是什么
  • 互联网Java工程师面试题·Java 总结篇·第一弹
  • Anylogic 读取和写入Excel文件
  • 茶百道全链路可观测实战
  • Java-JDBC