首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >基数排序的简单实现

基数排序的简单实现

作者头像
lexingsen
发布2022-02-24 19:18:31
发布2022-02-24 19:18:31
3770
举报
文章被收录于专栏:乐行僧的博客乐行僧的博客

基数排序是基于分配和收集来进行的,而通常内部排序是基于比较进行的,这一点需要注意。基数排序里涉及到多次的除法和模运算,因此基数排序是的执行时间较长。这里使用STL中的queue来作为桶,不需要单独去实现队列。

代码语言:javascript
复制
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;

//这里选择基数位10   对10进制的数字进行基数排序

//获取10进制数的第i位    i从0开始
/*
比如987, 第0位为7, 第一位为8, 第二位为9
*/
int getBit(int x, int i) {
	while(i --) x /= 10;
	return x %= 10;
}

//基数排序要求数组中的每一个数字的位数相同     d表示位数 
void radixSort(int *a, int n, int d) {
	queue<int> q[10];//10进制数需要10个桶
	//d位的数字需要进行  d趟的收集与分配
	for(int i=0; i<d; ++i) {
		//分配
		for(int j=0; j<n; ++j) q[getBit(a[j], i)].push(a[j]);
		//收集
		for(int j=0, k=0; j<10; ++j) {
			while(! q[j].empty()) {
				a[k ++]  = q[j].front(); q[j].pop();
			}
		}
	}
}

int main() {
	int a[] = {33, 44, 11, 88, 22, 77, 99, 66, 55};
	int n = sizeof a/sizeof(int);
	radixSort(a, n, 2);
	for_each(a, a+n, [](int a){cout << a << " ";});
	return 0;
}

执行结果:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档