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

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

1、说明

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

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

2、算法分析

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

3、C++代码

cpp 复制代码
#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;
}

输出结果

相关推荐
蹦蹦跳跳真可爱5895 分钟前
Python----OpenCV(几何变换--图像平移、图像旋转、放射变换、图像缩放、透视变换)
开发语言·人工智能·python·opencv·计算机视觉
骁的小小站9 分钟前
HDLBits刷题笔记和一些拓展知识(十一)
开发语言·经验分享·笔记·其他·fpga开发
Jtti11 分钟前
如何准确查看服务器网络的利用率?
开发语言·php
人生在勤,不索何获-白大侠16 分钟前
day17——Java集合进阶(Collections、Map)
java·开发语言
程序员小羊!29 分钟前
Java教程:JavaWeb ---MySQL高级
java·开发语言·mysql
m0_7231402336 分钟前
Python训练营-Day49
开发语言·python
科大饭桶1 小时前
数据结构自学Day5--链表知识总结
数据结构·算法·leetcode·链表·c
一洽客服系统1 小时前
网页嵌入与接入功能说明
开发语言·前端·javascript
mit6.8241 小时前
[Meetily后端框架] Whisper转录服务器 | 后端服务管理脚本
c++·人工智能·后端·python
zhangfeng11332 小时前
python 数据分析 单细胞测序数据分析 相关的图表,常见于肿瘤免疫微环境、细胞亚群功能研究 ,各图表类型及逻辑关系如下
开发语言·python·数据分析·医学