你说得对但是基数排序已纳入cjdst.h
2024-08-13 23:00:25
发布于:湖南
31阅读
0回复
0点赞
好用爱用
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
vector <int> bucket[65536];
int get_digit(int n, int radix){
	int ct = 0;
	while(n){
		ct++, n /= radix;
	}
	return ct;
}
void fsort(int *left, int *right, int radix = 65536){
	int max_digit = 0;
	for(int *i = left; i < right; i++){
		max_digit = max(max_digit, get_digit(*i, radix));
	}
	for(int _ = 1, cur = 1; _ <= max_digit; _++, cur *= radix){
		for(int *i = left; i < right; i++){
			bucket[(*i) / cur % radix].push_back(*i);
		}
		int *ct = left;
		for(int i = 0; i < radix; i++){
			for(auto it:bucket[i]){
				*ct++ = it;
			}
			bucket[i].clear();
		}
	}
}
int a[100005];
int main(){
	int n;
	cin >> n;
	for(int i = 1; i <= n; i++){
		cin >> a[i];
	}
	fsort(a + 1, a + n + 1);
	for(int i = 1; i <= n; i++){
		cout << a[i] << ' ';
	}
	
	return 0;
}
这里空空如也







有帮助,赞一个